수 묶기의 규칙을 이용해 그리디 알고리즘을 사용해보자
규칙 1 : 양수, 양수 = 곱셈 / 음수, 음수 = 곳셈 / 양수, 음수 = 덧셈
규칙 2 : 0, 양수 = 덧셈 / 0, 음수 = 곱셈
규칙 3 : 1, 양수 = 덧셈 / 1, 음수 = 덧셈
수열을 받고
양수 음수로 분리
양수는 내림차순, 음수는 오름차순으로 정렬
각 분리한 리스트를 그리디 탐색으로 실행해 도출
N = int(input())
# 양수, 음수, 1을 분리
positive=[]
negative=[]
one=[]
for _ in range(N):
num = int(input())
if num > 1:
positive.append(num)
elif num <= 0:
negative.append(num)
else:
one.append(num)
# 그리디 탐색에 맞게 양수는 내림차순, 음수는 오름차순으로 정렬
positive.sort(reverse=True)
negative.sort()
# 결과
result = 0
# 양수 리스트 입력
# 짝수일때
if len(positive) % 2 == 0:
for i in range(0,len(positive),2):
result += positive[i] * positive[i+1]
# 홀수일때
else:
for i in range(0,len(positive)-1,2):
result += positive[i] * positive[i+1]
result += positive[len(positive)-1]
# 음수 리스트 입력
# 짝수일때
if len(negative) % 2 == 0:
for i in range(0,len(negative),2):
result += negative[i] * negative[i+1]
# 홀수일때
else:
for i in range(0,len(negative)-1,2):
result += negative[i] * negative[i+1]
result += negative[len(negative)-1]
result += sum(one)
print(result)