https://www.acmicpc.net/problem/1744
곱해야 할때 고려해야 하는 것은 3가지이다.
이렇게 3가지를 고려하기 위해 음수와 양수를 따로 저장합니다.
양수는 parr에 음수와 0은 marr에 저장한 뒤 parr는 오름차순으로 marr은 내림차순으로 정렬하고, pop하면서 곱합니다. marr에는 0이 들어있어, 곱하지 못하고, 남아있는 수(음수)는 0을 곱합니다. 1의 경우는 곱하는게 손해이기 때문에 그냥 바로 더해줍니다.
from sys import stdin
input = stdin.readline
N = int(input())
sum = 0
marr = list() #음수를 가지는 리스트
parr = list() #양수를 가지는 리스트
for _ in range(N):
n = int(input())
#1의 경우는 더하는 것 밖에 없다.
if n==1:
sum += 1
#0초과면 parr에 넣는다.
elif n>0:
parr.append(n)
#0이하면 marr에 넣는다.
else:
marr.append(n)
marr.sort(reverse=True) #내림차순 정렬
parr.sort() #오름차순 정렬
while parr:
if len(parr)==1:#하나만 남는다면 그냥 더해라
sum+=parr.pop()
else: #양수들은 큰것들끼리 곱해서 더한다.
sum+= parr.pop()*parr.pop()
while marr:
if len(marr)==1:#하나만 남는다면 그냥 더해라.
sum+=marr.pop()
else:#음수는 작은 것들끼리 곱해서 더한다. 0은 남아있는 음수랑 곱해서 넣는다.
sum+=marr.pop()*marr.pop()
print(sum)