💡문제접근
- 음수 리스트와 양수 리스트를 따로 만들어서 해결했다.
- 음수 리스트는 오름차순으로 정렬하고 양수 리스트는 내림차순으로 정렬했다.
- 0을 음수 리스트에 넣어줬다. 왜냐하면 음수와 0을 더하면 음수가 나오고 음수와 0을 곱하면 0이 나와 곱한 값이 최댓값이 되기 때문이다. 최댓값을 유도하려면 0을 음수 리스트 쪽에 넣어 연산을 해줘야한다.
- ①. 음수 리스트의 길이가 짝수라면?
→ 음수 2개씩 묶어서 곱해서 더해준다.
- ②. 음수 리스트의 길이가 홀수라면?
→ 음수 리스트의 마지막 원소를 더하고 나머지는 2개씩 묶어서 곱해서 더해준다.
- ③. 양수 리스트의 길이가 짝수라면?
→ 양수 2개씩 묶어서 곱해서 더해준다.
- ④. 양수 리스트의 길이가 홀수라면?
→ 양수 리스트의 마지막 원소를 더하고 나머지는 2개씩 묶어서 곱해서 더해준다.
💡코드(메모리 : 31256KB, 시간 : 40ms)
import sys
input = sys.stdin.readline
N = int(input())
minus_li = []
plus_li = []
for _ in range(N):
val = int(input())
if val > 0:
plus_li.append(val)
else:
minus_li.append(val)
minus_li.sort()
plus_li.sort(reverse=True)
ans = 0
if len(minus_li) % 2 == 0:
for i in range(0, len(minus_li), 2):
ans += minus_li[i] * minus_li[i+1]
else:
ans = minus_li[-1]
for i in range(0, len(minus_li)-1, 2):
ans += minus_li[i] * minus_li[i+1]
if len(plus_li) % 2 == 0:
for i in range(0, len(plus_li), 2):
if plus_li[i] == 1 or plus_li[i+1] == 1:
ans += (plus_li[i] + plus_li[i+1])
else:
ans += plus_li[i] * plus_li[i+1]
else:
ans += plus_li[-1]
for i in range(0, len(plus_li)-1, 2):
if plus_li[i] == 1 or plus_li[i+1] == 1:
ans += (plus_li[i] + plus_li[i+1])
else:
ans += plus_li[i] * plus_li[i+1]
print(ans)
💡소요시간 : 17m