https://www.acmicpc.net/problem/1744
시간 2초, 메모리 128MB
input :
output :
조건 :
정렬 각이 세게 보인다...
역시 조건이 많아질수록 틀리기 쉬운거 같다...
어차피 음수끼리 곱해야 하는 거 알았으면... 리스트 2개 만들어서 했으면 되는데 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ....... ㄲㅂ
일단 2가지 포인트를 놓쳤다.
1. 1은 더해주는 것이 크다.(차라리 1만 따로 세아려서 나중에 더해주자.)
2. 0은 음수와 곱해줄 때 숫자가 가장 커진다.(음수의 리스트에 0까지 추가해 버리자)
음수의 리스트는 오름차순으로 정렬을 시켜서 서로 곱할 때 가장 커진다..
가장 작은 음수끼리 곱하면 양수가 되기에 값이 커짐.. 0은 가장 작은 놈이랑 곱해야 함.
마지막으로. 양수와 음수를 곱할 때 for문 안에서 i + 1 번째가 리스트의 바깥인지에 대한 예외처리가 필요하다.
import sys
n = int(sys.stdin.readline())
positive = []
negative = []
one = 0
for i in range(n):
data = int(sys.stdin.readline())
if data > 1:
positive.append(data)
elif data <= 0:
negative.append(data)
else:
one += 1
positive.sort(reverse=True)
negative.sort()
ans = 0
for i in range(0, len(positive), 2):
if i + 1 < len(positive):
ans += positive[i] * positive[i + 1]
else:
ans += positive[i]
for i in range(0, len(negative), 2):
if i + 1 < len(negative):
ans += negative[i] * negative[i + 1]
else:
ans += negative[i]
print(ans + one)