일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- java
- 코딩교육봉사
- 백준알고리즘
- 데이터베이스
- 정보처리산업기사
- C++
- 공부일지
- 코틀린
- 알고리즘
- python
- 시나공
- 문제풀이
- 자바
- 백준
- CJ UNIT
- 1과목
- 백준 알고리즘
- BFS
- softeer
- MYSQL
- 소프티어
- SW봉사
- SQL
- programmers
- kotlin
- 프로그래머스
- 코딩봉사
- 회고
- 스프링
- Today
- Total
JIE0025
[우선순위큐][실버3] 14235번 크리스마스 선물 - 파이썬(python) 본문
https://www.acmicpc.net/problem/14235
문제
크리스마스에는 산타가 착한 아이들에게 선물을 나눠준다. 올해도 산타는 선물을 나눠주기 위해 많은 노력을 하고 있는데, 전세계를 돌아댕기며 착한 아이들에게 선물을 나눠줄 것이다. 하지만 산타의 썰매는 그렇게 크지 않기 때문에, 세계 곳곳에 거점들을 세워 그 곳을 방문하며 선물을 충전해 나갈 것이다. 또한, 착한 아이들을 만날 때마다 자신이 들고있는 가장 가치가 큰 선물 하나를 선물해 줄 것이다.
이제 산타가 선물을 나눠줄 것이다. 차례대로 방문한 아이들과 거점지의 정보들이 주어졌을 때, 아이들이 준 선물들의 가치들을 출력하시오. 만약 아이들에게 줄 선물이 없다면 -1을 출력하시오.
입력
첫 번째 줄에서는 아이들과 거점지를 방문한 횟수 n이 주어진다.(1≤n≤5,000)
다음 n줄에는 a가 들어오고, 그 다음 a개의 숫자가 들어온다. 이는 거점지에서 a개의 선물을 충전하는 것이고, 그 숫자들이 선물의 가치이다. 만약 a가 0이라면 거점지가 아닌 아이들을 만난 것이다. 선물의 가치는 100,000보다 작은 양의 정수이다.(1≤a≤100)
출력
a가 0일 때마다, 아이들에게 준 선물의 가치를 출력하시오. 만약 줄 선물이 없다면 -1을 출력하라. 적어도 하나의 출력이 있음을 보장한다.
💻 사고 과정
문제 지문이 아주아주 약간 헷갈리는 것 빼고는 쉬운 문제이다.
- 우선순위큐를 써야한다.
- 입력이 0이면 아이를 만난거다. 우선순위큐에 값이 있는지 체크한다,
- 우선순위 큐에 값이 없으면 줄 선물이 없으므로 -1을 출력하낟.
- 우선순위 큐에 값이 있으면 가장 가치가 높은 선물을 준다. 가치가 높은 선물을 주기 위해선 최대힙을 사용해야한다.
heapq는 최소힙으로 동작한다. 따라서 최대힙을 만들어줘야하는데
최대힙은 튜플로 우선순위를 설정해주면 간편하게 만들수 있따.
💻 내가 쓴 정답코드
#14235 크리스마스 선물 우선순위 큐
import sys
import heapq
input = sys.stdin.readline
n = int(input())
presents = []
child = 0
for _ in range(n):
info = list(map(int,input().split()))
if info[0] == child:
if len(presents) == 0:
print(-1)
else:
present = heapq.heappop(presents)
print(present[1])
else:
num, presentInfo = info[0], info[1:]
for i in range(num):
heapq.heappush(presents, (-presentInfo[i],presentInfo[i]))
'알고리즘 > 백준' 카테고리의 다른 글
[다익스트라][골드5] 1916번 최소비용 구하기 - 파이썬(python) (0) | 2023.02.12 |
---|---|
[DP][실버5] 9655번 돌게임 - 파이썬(python) (0) | 2023.02.12 |
[▲][조합][골드5] 1038번 감소하는 수 - 파이썬(python) (0) | 2023.02.06 |
[백트래킹][실버3] 18429번 근손실 - 파이썬(python) (0) | 2023.02.06 |
[백트래킹][실버3] 15649번 N과 M (1) - 파이썬(python) (0) | 2023.02.06 |