import sys
N = int(input())
minus = 0
plus = 0
zero = 0
minus_list = []
plus_list = []
for i in range(N):
num = int(sys.stdin.readline())
if num > 0:
plus += 1
plus_list.append(num)
elif num < 0:
minus += 1
minus_list.append(num)
else:
zero += 1
minus_list.sort()
plus_list.sort()
plus_list.reverse()
new_minus = []
i = 0
while minus >= 2:
new_minus.append(minus_list[i] * minus_list[i+1])
minus -= 2
i += 2
if minus == 1 and zero != 0:
minus -= 1
zero -= 1
elif minus == 1 and zero == 0:
new_minus.append(minus_list[-1])
new_plus = []
i = 0
if 1 in plus_list:
new_plus.append(1)
plus_list.remove(1)
plus -= 1
while plus >= 2:
new_plus.append(plus_list[i] * plus_list[i+1])
plus -= 2
i += 2
if plus == 1:
new_plus.append(plus_list[-1])
print(sum(new_plus) + sum(new_minus))
코드
문제
https://boj.kr/1744
입력값을 +/- 기준으로 각각 배열에 저장.
각 배열에서 큰 값부터 2개씩 곱해서 새로운 배열에 저장.
1은 곱해도 같은 수이므로 처음부터 따로 빼서 더해줄 생각
-값과 0이 남아있다면 곱해서 0이 되므로 무시해줌
0은 더하나 마나임을 고려함.
질문에 있는 반례들은 다 통과하는데 왜 틀렸다고 뜨는건지 모르겠음
PS왕님들 답변좀 해주셈
나는 비슷한 논리로 통과했는데
니코드 보면 기존 plus배열에서 1을 제거할때 한번만 제거해서 1이 여러개일때 오답나는거아님??
기존 리스트에서 1을 지우는건 시간도 오래걸리니까 애초에 input을 받을때 1넘을때만 plus배열에 집어넣고 1일때는 따로 카운트해줬음 나는
유레카 !! 감사합니다 형님