문제출처: https://www.acmicpc.net/problem/1744
입력받은 수를 minus,plus,zero,one으로 나눈다.
minus는 절댓값이 큰 수부터 두개씩 묶어주고 1개가 남으면 0이 있는경우 0과 묶어준다.
1은 그대로 나둔다(그냥 더해주는게 제일 좋음)
plus는 큰 수 부터 2개씩 묶어준다.
import sys
input = sys.stdin.readline
n = int(input())
minus = []
plus = []
zero = []
one = []
result = 0
for i in range(n):
num = int(input())
if num == 0:
zero.append(num)
elif num == 1:
one.append(num)
elif num > 1:
plus.append(num)
else:
minus.append(num)
minus.sort(key=lambda x:abs(x))
plus.sort()
while True:
if len(minus) == 1 and zero:
zero.pop()
minus.pop()
break
if len(minus) // 2 < 1:
break
a = minus.pop()
b = minus.pop()
result += a*b
while True:
if len(plus) // 2 < 1:
break
a = plus.pop()
b= plus.pop()
result += a*b
if minus:
result += sum(minus)
if one:
result += sum(one)
if plus:
result += sum(plus)
print(result)