몇가지만 주의해서 의식의 흐름대로 코드를 짜면 된다.
그렇게 어려운 문제는 아닌데 생각보다 변수?가 많아서 오래 걸렸다.
반례를 스스로 생각해내면 좋지만 본인의 코드가 주어진 예제는 잘 나오는데 제출하면 어딘가에서 자꾸 틀린다면 여기에서 반례를 하나씩 해보고 뭐가 문제인지 찾아보면 될 것 같다.
import sys
from collections import deque
def add_nums(nums, add):
tmp = 0
for i in range(0, len(nums) - 1, 2):
# 둘 다 양수이거나 음수인 경우 곱해서 더함
if nums[i] * nums[i + 1] > 0:
tmp += nums[i] * nums[i + 1]
else:
tmp += (nums[i] + nums[i + 1])
if len(nums) % 2 != 0:
n = nums.pop()
if n < 0 and 0 in add:
n = 0
tmp += n
return tmp
N = int(input())
result = 0
add = []
nums = []
negative = []
positive = []
for _ in range(N):
n = int(sys.stdin.readline())
if n == 0 or n == 1:
add.append(n)
else:
nums.append(n)
result += sum(add)
# 음수는 오름차순, 양수는 내림차순으로 정렬
for i, n in enumerate(nums):
if n < 0: negative.append(n)
else: positive.append(n)
negative.sort()
positive.sort(reverse = True)
result += add_nums(negative, add)
result += add_nums(positive, add)
print(result)