머리로는 알겠는데 코드로 옮기기가 귀찮은 문제
음수, 0, 1, 양수 따로 저장하고
- 데이터 저장
음수, 0, 1, 양수 따로 저장- 정렬
음수는 오름차순으로 (절댓값이 내림차순)
양수는 내림차순으로- 수 묶기
음수리스트, 양수리스트에서 2개씩 묶어 곱하고 더하기
answer += A[i] * A[i + 1]
3.1 리스트 길이가 홀수면 숫자가 한개 남는다. 이를 각각rest_negative,rest_positive로 저장- 0이 있다면 음수 * 0으로 만들어서 음수를 없애버린다.
- 남은 수 모두 더하기
import sys
#sys.stdin = open('input.txt', 'r')
sys.setrecursionlimit(int(1e5))
input = sys.stdin.readline
N = int(input())
isZero = False
ones = 0
positive = []
negative = []
for _ in range(N):
x = int(input())
if x == 0:
isZero = True
elif x == 1:
ones += 1
elif x < 0:
negative.append(x)
else:
positive.append(x)
negative.sort()
positive.sort(reverse=True)
answer = 0
for i in range(0, len(positive) - 1, 2):
answer += positive[i] * positive[i + 1]
rest_positive = 0
if len(positive) % 2 == 1:
rest_positive = positive[-1]
for i in range(0, len(negative) - 1, 2):
answer += negative[i] * negative[i + 1]
rest_negative = 0
if len(negative) % 2 == 1:
rest_negative = negative[-1]
if isZero:
# remove negative value <-- 0 * rest_negative
answer += ones + rest_positive
else:
answer += ones + rest_negative + rest_positive
print(answer)