https://www.acmicpc.net/problem/1744
문제 풀이
- 수열이 주어질 때, 값 들을 곱해서 최대 합을 구하기
- 2가지 수를 묶거나 묶지 않을 수 있다.
- 양수값과 음수값을 따로 구해서 곱해준다.
N = int(input()) # 수열의 크기
plus = []
minus = []
res = 0
for _ in range(N):
num = int(input())
if num > 1:
plus.append(num)
elif num == 1:
res += 1
else:
minus.append(num)
plus.sort(reverse=True)
minus.sort()
plus_size, minus_size = len(plus), len(minus)
if len(plus) % 2 == 0: # 양수 + 짝수 개수
for idx in range(0, plus_size, 2):
res += plus[idx] * plus[idx + 1]
else: # 양수 + 홀수 개수
res += plus[plus_size - 1] # 마지막 값
for idx in range(0, plus_size - 1, 2):
res += plus[idx] * plus[idx + 1]
if len(minus) % 2 == 0: # 음수 + 짝수 개수
for idx in range(0, minus_size, 2):
res += minus[idx] * minus[idx + 1]
else: # 음수 + 홀수 개수
res += minus[minus_size - 1] # 마지막 값
for idx in range(0, minus_size - 1, 2):
res += minus[idx] * minus[idx + 1]
print(res)
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2910번 빈도정렬 (1) | 2023.04.11 |
---|---|
[백준] 2170번 선긋기 (0) | 2023.04.08 |
[백준] 11501번 주식 (0) | 2023.04.08 |
[백준] 1541번 잃어버린 괄호 (0) | 2023.04.08 |
[백준] 9996번 한국이 그리울땐 서버에 접속하지 (0) | 2023.04.07 |