Coding Problem/Greedy

[BOJ 1202] 보석 도둑

Yepchani 2025. 3. 9. 20:00
반응형

문제

보석 도둑

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

 

 

풀이

설명

훔칠 수 있는 보석 가격의 합의 최댓값을 구하는 문제입니다.

 

그리디 알고리즘과 우선순위 큐를 사용해 해결할 수 있습니다.

 

보석은 무게를 기준으로 오름차순, 가방은 오름차순으로 정렬합니다.

 

가방을 순회하면서 현재 가방에 담을 수 있는 모든 보석을 큐에 추가합니다.

큐에는 가방에 담을 수 있는 보석들이 가격이 비싼 순으로 들어 있습니다.

큐 추가 작업이 끝나면 가장 비싼 보석을 꺼내 결과에 더해줍니다.

 

예시 코드

function solution() {
  const [n, k] = input().split(" ").map(Number);
  const gems = Array.from({ length: n }, () => input().split(" ").map(Number));
  const bags = Array.from({ length: k }, () => Number(input()));
  let gemIdx = 0;
  let answer = 0;

  gems.sort((a, b) => a[0] - b[0]);
  bags.sort((a, b) => a - b);

  const pq = new PriorityQueue();

  for (const bag of bags) {
    while (gemIdx < n && gems[gemIdx][0] <= bag) {
      pq.enqueue(gems[gemIdx][1]);
      gemIdx++;
    }

    if (!pq.isEmpty()) {
      answer += pq.dequeue();
    }
  }

  return answer;
}

'Coding Problem > Greedy' 카테고리의 다른 글

[BOJ 1339] 단어 수학  (0) 2025.03.12
[프로그래머스] 단속카메라  (0) 2024.11.14
[BOJ 1700] 멀티탭 스케줄링  (1) 2023.12.02
[BOJ 12904] A와 B  (0) 2023.11.25