"""
0: 음수를 제거할 수 있는 용도
1: 1과 다른 양수를 곱하면 값이 더 작아지므로 바로 합에 더함
음수: [-5*-10 = 50] 같이 곱이 더 큰 값을 가지는 일반적인 경우만 음수 리스트에 추가
양수: [8*7 = 56]
"""
ans = 0
N = int(input())
arr = [int(input()) for _ in range(N)]
zero = False
negative = []
positive = []
for num in arr:
if num == 0:
zero = True # 0은 한번만 사용하게 된다.
elif num == 1:
ans += 1
elif num >= 1:
positive.append(num)
else:
negative.append(-num)
negative.sort()
positive.sort()
while len(positive)>=2:
A = positive.pop()
B = positive.pop()
ans += (A*B)
if positive:
ans += positive[0]
# while 문을 벗어나면 남은 negative 리스트의 길이는 0 또는 1 보장
while len(negative)>=2:
A = negative.pop()
B = negative.pop()
ans += (A*B)
if negative:
if not zero:
ans -= negative[0]
print(ans)
코드를 복잡하게 만들지 않기 위해서 1을 제외한 양수와 1을 따로 구분했다. 0을 음수 제거 용도로 사용할 수 있다는 생각을 떠올리면 문제가 단순해진다.
ans
에 더해준다. while len(리스트)>=2
적절하게 사용