- 문제
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)
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[Python3/백준]15903번 : 카드 합체 놀이 (0) | 2024.08.02 |
---|---|
[BOJ/C++] 2346번 : 풍선 터뜨리기 (0) | 2024.08.01 |
[백준/java]- 구간 합 구하기 5 (0) | 2024.07.28 |
[백준/c++] 2110번 : 공유기 설치 (0) | 2024.07.28 |
[백준/python] 19637 : IF문 좀 대신 써줘 (0) | 2024.07.27 |