[Python] 백준 1744: 수 묶기

Jonie Kwon·2022년 4월 29일
0


https://www.acmicpc.net/problem/1744

풀이

절대 값이 큰 음수끼리 곱해서 양수를 만들어 answer에 더해준다
남은 음수가 있고 0이 있다면 음수를 0으로 만들고 0이 없으면 그냥 더해준다.
양수도 마찬가지로 큰수끼리 곱해서 더해준다.
1일 경우에는 곱하는 것보다 더하는 게 더 큰 수를 만들 수 있으므로 더해준다.

코드

import sys
from heapq import heappop, heapify
input = sys.stdin.readline
n = int(input())
nums = [int(input()) for _ in range(n)]
zeros = [x for x in nums if x==0]
minus = [x for x in nums if x<0]
plus = [-x for x in nums if x>0]
heapify(minus)
heapify(plus)
answer = 0
# 음수 처리 : 가장 작은 음수끼리 곱해서 큰 양수를 만들어 줌
while len(minus)>1:
    n1 = -heappop(minus)
    n2 = -heappop(minus)
    answer+= n1*n2
# 남은 음수는 0이 있을경우 0, 없으면 더해주기
if minus and not zeros:
    answer += minus[0]

# 양수 처리: 가장 큰 양수끼리 곱해서 더해줌, 이때 1이 있으면 곱하지 말고 개별로 더하기
while len(plus)>1:
    n1 = -heappop(plus)
    n2 = -heappop(plus)
    if n1==1 or n2==1:
        answer+= n1+n2
        break
    else:
        answer+= n1*n2
# 가장 큰 수가 1일경우 순회 종료 후 남은 1 더하기
while plus:
    answer+= -heappop(plus)
print(answer)
profile
메모하는 습관

0개의 댓글