-
1744. [Python]수 묶기Python_알고리즘/Gold IV 2025. 4. 6. 08:54
1. 문제
https://www.acmicpc.net/problem/1744
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- 정렬
3. 파이썬 코드
import sys # 인풋 리스트 num_list = [] input = sys.stdin.readline N = int(input()) for _ in range(N): num_list.append(int(input())) # 리스트 정렬 num_list.sort() # + 부분과 - 부분 구분 plus_list = [] minus_list = [] # 정답 및 len 사용하지 않을 변수 선언 ans = 0 plus_length = 0 minus_length = 0 # 반복문 돌며 + 리스트와 - 리스트 길이 및 저장 for i in range(N-1,-1,-1): if num_list[i] > 0: plus_list.append(num_list[i]) plus_length += 1 else: minus_list.append(num_list[i]) minus_length += 1 # 길이가 있는 경우 if plus_length > 0: # 짝수인 경우와 홀수인 경우 구분 check = plus_length % 2 if check == 1: # 홀수인 경우 높은값부터 -1번 전까지 곱 or 합 중 높은값 추가 for j in range(0,plus_length-2,2): ans += max(plus_list[j]*plus_list[j+1],plus_list[j]+plus_list[j+1]) # 이후 맨 마지막 인덱스 더해줌 ans += plus_list[-1] # 짝수인경우 끝까지 합 or 곱 중 높은 값 더함 else: for j in range(0,plus_length-1,2): ans += max(plus_list[j]*plus_list[j+1],plus_list[j]+plus_list[j+1]) # 길이가 있는 경우 if minus_length > 0: # 짝, 홀로 나누어 계산 check = minus_length % 2 if check == 1: # 위와 마찬가지로 끝값 더해줌 for j in range(minus_length-1,0,-2): ans += (minus_list[j]*minus_list[j-1]) ans += minus_list[0] else: for j in range(minus_length-1,-1,-2): ans += (minus_list[j]*minus_list[j-1]) print(ans)
4. 문제를 풀고난 후 생각
- + 리스트와 - 리스트로 나누어서 식의 값들을 계산해주는 방식으로 접근했다.
- 처음 정렬을 통해서 리스트를 구분한 후 - 리스트의 경우는 - * - = + 이므로 낮은 값들끼리 곱셈을 진행했고 + 리스트는 큰 값의 곱이 덧셈보다 크기 때문에 0번 인덱스부터 진행했다.
- + 리스트의 경우 1, 1, 1, 1 이런 식으로 나올 수 있기 때문에 덧셈 or 곱셈 중 max 값을 고르는 것으로 예외 처리를 진행해주었다.
5. 문제를 푸는데 도움이 되는 지식
- 정렬
'Python_알고리즘 > Gold IV' 카테고리의 다른 글
14502. [Python]연구소 (0) 2024.10.17 2631. [Python]줄세우기 (0) 2024.10.12 10159. [Python]저울 (0) 2024.09.19 17404. [Python]RGB거리 2 (2) 2024.09.02 1806. [Python]부분합 (0) 2024.08.19