import sys
input = sys.stdin.readline
n = int(input())
parr = []
marr = []
res = 0
for i in range(n):
a = int(input())
if a == 1:
res += 1
elif a > 0:
parr.append(a)
else:
marr.append(a)
parr.sort()
marr.sort(reverse=True)
while len(parr) != 0:
if len(parr) == 1:
res += parr.pop()
else:
res += parr.pop() * parr.pop()
while len(marr) != 0:
if len(marr) == 1:
res += marr.pop()
else:
res += marr.pop() * marr.pop()
print(res)
입력 값이 1일경우 곱하면 오히려 다음수에 곱하지 못해서 괄호를 하지않고 바로 결과값에 1을 더하고
0보다 크면 parr 에 넣고
0보다 같거나 작을경우에는 marr에 넣는다
parr는 오름차순 정렬을 해서 젤끝에부터 , pop을 2번 실행해서 곱해주고
parr의 길이 len이 1이 되었을경우에는 pop을 한번 실행해서 더해준다
그리고 marr는 내림차순으로 정렬했는데 오름차순으로 정렬했을경우에는
-7 -5 -1 으로 정렬되기 때문에 내림차순으로 정렬했다.
그리고 0 이 있을경우에는 마이너스 일 경우에는 가장 작은 값을 곱해주는게
값이 더 커진다.
처음에는 marr를 오름차순으로 정렬해서 0의 갯수만큼 곱해줬는데
굳이 그럴 필요없이 marr를 내림차순으로 0을 가장 작은값과 곱해지도록 했다.
힌트를 살짝 보았지만 접근 자체는 괜찮았던 것 같다.
그리디도 조금씩 문제가 풀리는것 같은 기분이다...