BOJ 1744: 수 묶기 https://www.acmicpc.net/problem/1744
두 수
를 묶는다.N = int(input())
posi = [] # 양수를 담을 배열
nega = [] # 음수를 담을 배열
answer = 0 # 출력할 정답
for _ in range(N):
n = int(input())
if n > 1:
posi.append(n)
elif n == 1:
answer += 1 # 1은 곱하는 것 보다 더하는 것이 더 큰 값이 된다.
else:
nega.append(n)
nega.sort()
posi.sort(reverse=True) # 양수는 내림차순으로 정렬해야 곱하는 데 편하다
# 음수의 수가 짝수일 때
if len(nega) % 2 == 0:
result = 0
# 2개씩 곱해서 더해준다.
for i in range(0, len(nega), 2):
result += nega[i] * nega[i + 1]
answer += result
# 음수의 수가 홀수일 때
else:
result = 0
# 2개씩 곱해서 더해주고
for i in range(0, len(nega)-1, 2):
result += nega[i] * nega[i + 1]
# 마지막 수는 절댓값이 가장 작은 음수이므로 그냥 더해준다.
result += nega[-1]
answer += result
# 양수의 수가 짝수일 때
if len(posi) % 2 == 0:
result = 0
# 2개씩 곱해서 더해준다.
for i in range(0, len(posi), 2):
result += posi[i] * posi[i + 1]
answer += result
# 양수의 수가 홀수일 때
else:
result = 0
# 2개씩 곱해서 더해주고
for i in range(0, len(posi)-1, 2):
result += posi[i] * posi[i + 1]
# 마지막 수는 더해준다.
result += posi[-1]
answer += result
print(answer)