이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

[골드 2] 백준 1202 - 보석 도둑 (파이썬)

  • 2025.04.08 13:00
  • Programming/백준
글 작성자: 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)

저작자표시 비영리 (새창열림)

'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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [브론즈 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
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (444) N
    • Forensics (104)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (23)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (253) N
      • C (10)
      • Python (11)
      • 백준 (199) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 디지털포렌식
  • 파이썬
  • 백준
  • 프로그래머스
  • Forensics
  • 포렌식
  • pental
  • axiom
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바