https://www.acmicpc.net/problem/1744
절대 값이 큰 음수끼리 곱해서 양수를 만들어 answer에 더해준다
남은 음수가 있고 0이 있다면 음수를 0으로 만들고 0이 없으면 그냥 더해준다.
양수도 마찬가지로 큰수끼리 곱해서 더해준다.
1일 경우에는 곱하는 것보다 더하는 게 더 큰 수를 만들 수 있으므로 더해준다.
import sys
from heapq import heappop, heapify
input = sys.stdin.readline
n = int(input())
nums = [int(input()) for _ in range(n)]
zeros = [x for x in nums if x==0]
minus = [x for x in nums if x<0]
plus = [-x for x in nums if x>0]
heapify(minus)
heapify(plus)
answer = 0
# 음수 처리 : 가장 작은 음수끼리 곱해서 큰 양수를 만들어 줌
while len(minus)>1:
n1 = -heappop(minus)
n2 = -heappop(minus)
answer+= n1*n2
# 남은 음수는 0이 있을경우 0, 없으면 더해주기
if minus and not zeros:
answer += minus[0]
# 양수 처리: 가장 큰 양수끼리 곱해서 더해줌, 이때 1이 있으면 곱하지 말고 개별로 더하기
while len(plus)>1:
n1 = -heappop(plus)
n2 = -heappop(plus)
if n1==1 or n2==1:
answer+= n1+n2
break
else:
answer+= n1*n2
# 가장 큰 수가 1일경우 순회 종료 후 남은 1 더하기
while plus:
answer+= -heappop(plus)
print(answer)