Koala - 15기/코딩테스트 준비 스터디

[백준/Python] #14325 크리스마스 선물

영찬_ 2024. 7. 31. 14:35

- 문제

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

- 알고리즘

입력으로 0이 들어온 곳에서는 현재 가지고 있는 선물중에 가치가 가장 높은 선물을 주고, 줄 선물이 없다면 -1을 출력하면 되는 문제이다.

이때, 현재 가지고 있는 선물중에 가치가 높은 선물을 선별하기 위해 우선순위 큐를 사용하였다. 

파이썬에 내장되어있는 module을 가져왔고, 이 모듈에서 get을 할때 가장 낮은 숫자부터 get을 해주기 때문에, 선물의 가치에 -1을 곱하여 음수로 표현한 뒤 넣어주었다. 이렇게 하면 절댓값이 가장 높은 수부터 get이 되고, 나중에 출력할때 -1을 곱해서 출력하도록 구성하였다.

이 문제에서 입력에 0 or a+1만큼의 숫자들로 입력이 진행되기 때문에, 리스트로 받아서 리스트의 첫번째 원소를 통해 case를 나누어 진행했다. 

- Code

import sys
input = sys.stdin.readline
from queue import PriorityQueue

n = int(input())
que = PriorityQueue()

for _ in range(n):
    line = list(map(int,input().split()))

    if line[0] == 0:
        if que.empty() == False:
            print(que.get()*-1)
        else:
            print(-1)
    else:
        for i in range(1,line[0]+1):
            que.put(line[i]*-1)