본문 바로가기
알고리즘 & 자료구조/백준

백준 1202

by 신재권 2022. 8. 1.
package baekjoon.그리디;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

class Main1202 {

   public static void main(String[] args) throws Exception {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(br.readLine());
      int N = Integer.parseInt(st.nextToken());
      int K = Integer.parseInt(st.nextToken());
      List<Jewel> j = new ArrayList<>();
      for (int i = 0; i < N; i++) {
         st = new StringTokenizer(br.readLine());
         j.add(new Jewel(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
      }
      j.sort((o1, o2) -> {
         if (o1.m == o2.m) {
            return o2.v - o1.v;
         }
         return o1.m - o2.m;
      });
      int[] b = new int[K];
      for (int i = 0; i < K; i++) {
         b[i] = Integer.parseInt(br.readLine());
      }
      Arrays.sort(b);

      PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
      long ans = 0;
      int idx = 0;
      for (int i = 0; i < K; i++) {
         while (idx < N && j.get(idx).m <= b[i]) {
            pq.add(j.get(idx++).v);
         }
         if (!pq.isEmpty()) {
            ans += pq.poll();
         }
      }

      System.out.println(ans);
   }

   private static class Jewel {
      int m, v;

      public Jewel(int m, int v) {
         this.m = m;
         this.v = v;
      }
   }

}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 2864  (0) 2022.08.04
백준 1744  (0) 2022.08.03
백준 1439  (0) 2022.07.29
백준 10610  (0) 2022.07.28
백준 1789  (0) 2022.07.27