IT 정보/알고리즘(백준, BOJ)

[백준-BOJ] 1202

Dalyoung 2017. 1. 20. 22:46
반응형

www.acmicpc.net/problem/1202

 

1202번: 보석 도둑

첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci

www.acmicpc.net

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
 
public class Main {
    public static void main(String[] args) throws IOException {
        Main m = new Main();
        m.doit();
    }
     
    int T, N, K; 
    List<Node> list; 
    List<Integer> bag;
    PriorityQueue<Node> pq;
    public void doit() throws IOException{
      //  System.setIn(new FileInputStream("input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String [] input = br.readLine().split(" ");
        N = Integer.parseInt(input[0]);
        K = Integer.parseInt(input[1]);
        
        list = new ArrayList<Node>(); 
        bag = new ArrayList<Integer>();
        for(int i = 0; i < N; i++){
        	input = br.readLine().split(" ");
        	Node node = new Node(Integer.parseInt(input[0]), Integer.parseInt(input[1]));
        	list.add(node);
        }
        for(int i = 0; i < K; i++){
        	bag.add(Integer.parseInt(br.readLine()));
        }
        Collections.sort(list, Node.comp);
        Collections.sort(bag);
        pq = new PriorityQueue<Node>(N, new Comparator<Node>() {
			@Override
			public int compare(Node o1, Node o2) {
				if(o2.v == o1.v){
					return o2.m - o1.m;
				}
				return o2.v - o1.v;
			}
		});
        
//        System.out.println(Arrays.toString(list.toArray()));
//        System.out.println(Arrays.toString(bag.toArray()));
        int j = 0;
        long ret = 0;
        for(int i = 0; i < K; i++){
        	while(j < N && list.get(j).m <= bag.get(i)){
        			pq.add(list.get(j));
        			j++;
        	}
        	if(!pq.isEmpty()){
//        		if(bag.get(i) >= pq.peek().m){
        			ret += pq.poll().v;
//        		}
        	}
//        	System.out.println(Arrays.toString(pq.toArray()));
        }
        System.out.println(ret);
        br.close();
    }
}

class Node{
	int m;
	int v;
	
	Node(int m, int v){
		this.m = m;
		this.v = v;
	}
	
	static Comparator<Node> comp = new Comparator<Node>() {

		@Override
		public int compare(Node o1, Node o2) {
			// TODO Auto-generated method stub
			if(o1.m == o2.m){
				return o1.v - o2.v;
			}
			return o1.m - o2.m;
		}
	};

	@Override
	public String toString() {
		return "[" + m + ", " + v + "]";
	}
	
	
}
반응형

'IT 정보 > 알고리즘(백준, BOJ)' 카테고리의 다른 글

[백준-BOJ] 1328  (0) 2017.01.20
[백준-BOJ] 1260  (0) 2017.01.20
[백준-BOJ] 1149  (0) 2017.01.20
[백준-BOJ] 1120  (0) 2017.01.14
[백준-BOJ] 1110  (0) 2017.01.14