Algorithm/Baekjoon

[힙] 백준 #14235 크리스마스 선물 - Python

jyjyjy25 2024. 3. 9. 03:37

🗂️ 문제

링크: https://www.acmicpc.net/problem/14235

 

14235번: 크리스마스 선물

크리스마스에는 산타가 착한 아이들에게 선물을 나눠준다. 올해도 산타는 선물을 나눠주기 위해 많은 노력을 하고 있는데, 전세계를 돌아댕기며 착한 아이들에게 선물을 나눠줄 것이다. 하지만

www.acmicpc.net

 

💡 접근법

heapq 라이브러리를 사용하여 a가 0이 아니라면 선물의 가치를 heap에 저장하고, a가 0이라면 선물의 가치가 큰 순서대로 힙에서 요소를 꺼내 출력한다. 이때 힙에 남아있는 요소의 개수가 0이라면 -1을 출력한다.

또한 최대힙을 구성하기 위해 push할때 -부호를 붙여서 힙에 요소를 넣어주고, pop할 때는 -부호를 붙여서 출력한다.

 

😎 내 코드

import sys
import heapq

N = int(sys.stdin.readline())

present = []
for _ in range(N):
    A = sys.stdin.readline().rstrip()
    if A == '0':
        if len(present) == 0:
            print(-1)
        else:
            print(-heapq.heappop(present))
    else:  
        A = list(map(int, A.split()))
        for i in range(1, len(A)):
            heapq.heappush(present, -A[i])

 

👀 배운 코드

import sys
import heapq

N = int(sys.stdin.readline())

present = []
for _ in range(N):
    A = list(map(int, sys.stdin.readline().split()))
    if A[0] == 0:
        if len(present) == 0:
            print(-1)
        else:
            print(-heapq.heappop(present))
    else:  
        for i in range(1, len(A)):
            heapq.heappush(present, -A[i])

 

🧐 배운 점

  • 한 줄에 입력되는 값의 형태가 0인 경우와 2 3 2인 두 경우에 대해 split()을 하고 해당 결과를 list()로 변환하면 결과는 [0], [2, 3, 2]가 된다. 이를 통해 입력되는 값의 형태가 다르더라도 하나의 변수(A)를 사용하여 저장될 수 있도록 한다.

 

✅ 정답 확인