[골드 2] 백준 1202 - 보석 도둑 (파이썬)
글 작성자: pental

https://www.acmicpc.net/problem/1202
풀이
정렬 + 그리디 + 우선순위 큐 알고리즘으로 해결 할 수 있다.
문제의 핵심은 무게 제한이 있는 가방에 최대 가치를 가지는 보석을 훔치는 방법이다.
J = [tuple(map(int, input().split())) for _ in range(N)] B = [int(input()) for _ in range(K)] J.sort() B.sort()
- 보석 리스트 J는 무게 기준 오름차순 정렬
- 가방 리스트 B는 무게 제한 기준 오름차순 정렬
가방을 무게 제한이 작은 순서대로 처리하면서, 해당 가방에 담을 수 있는 보석 중 가장 비싼 보석을 선택한다.
pq = PriorityQueue() answer = 0 pos = 0
- 최대 힙을 구현하기 위해 - 가격을 우선순위 큐에 집어 넣는다.
- pos는 보석 리스트에서 현재 가방까지 확인한 보석의 인덱스를 저장한다.
for i in range(K): while pos < N and J[pos][0] <= B[i]: pq.put(-J[pos][1]) pos += 1
- 현재 가방 B[i]에 담을 수 있는 보석을 모두 우선순위 큐에 삽입한다.
- 우선순위 큐는 가격이 높은 순으로 정렬된 힙 역할을 한다.
if pq.qsize() > 0 : answer += -pq.get()
- 가장 가치 높은 보석을 꺼내어 담는다.
코드
# 백준 1202 - 보석 도둑 # 분류 : 정렬 import sys from queue import PriorityQueue input = sys.stdin.readline N, K = map(int, input().split()) J = [tuple(map(int, input().split())) for _ in range(N)] B = [int(input()) for _ in range(K)] J.sort() B.sort() pq = PriorityQueue() answer = 0 pos = 0 for i in range(K) : while pos < N and J[pos][0] <= B[i] : pq.put(-J[pos][1]) pos += 1 if pq.qsize() > 0 : answer += -pq.get() print(answer)
이 글은
(새창열림)
본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리
'Programming > 백준' 카테고리의 다른 글
[브론즈 2] 백준 15829 - Hashing (파이썬) (0) | 2025.04.10 |
---|---|
[실버 1] 백준 1149 - RGB거리 (파이썬) (0) | 2025.04.09 |
[실버 1] 백준 14225 - 부분수열의 합 (파이썬) (0) | 2025.04.07 |
[실버 2] 백준 1535 - 안녕 (파이썬) (0) | 2025.04.06 |
[브론즈 2] 백준 3040 - 백설 공주와 일곱 난쟁이 (파이썬) (0) | 2025.04.05 |
댓글
이 글 공유하기
다른 글
-
[브론즈 2] 백준 15829 - Hashing (파이썬)
[브론즈 2] 백준 15829 - Hashing (파이썬)
2025.04.10 -
[실버 1] 백준 1149 - RGB거리 (파이썬)
[실버 1] 백준 1149 - RGB거리 (파이썬)
2025.04.09 -
[실버 1] 백준 14225 - 부분수열의 합 (파이썬)
[실버 1] 백준 14225 - 부분수열의 합 (파이썬)
2025.04.07 -
[실버 2] 백준 1535 - 안녕 (파이썬)
[실버 2] 백준 1535 - 안녕 (파이썬)
2025.04.06
댓글을 사용할 수 없습니다.