티스토리 뷰

Algorithm/BaekJoon

[BOJ] 1781. 컵라면

cherishee 2020. 8. 19. 12:06

문제

상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라인을 정하였다.

문제 번호데드라인컵라면 수

1 2 3 4 5 6 7
1 1 3 3 2 2 6
6 7 2 1 4 5 1

위와 같은 상황에서 동호가 2, 6, 3, 1, 7, 5, 4 순으로 숙제를 한다면 2, 6, 3, 7번 문제를 시간 내에 풀어 총 15개의 컵라면을 받을 수 있다.

문제는 동호가 받을 수 있는 최대 컵라면 수를 구하는 것이다. 위의 예에서는 15가 최대이다.

문제를 푸는데는 단위 시간 1이 걸리며, 각 문제의 데드라인은 N 이하이다. 또, 각 문제를 풀 때 받을 수 있는 컵라면 수와 최대로 받을 수 있는 컵라면 수는 모두 32비트 정수형 범위 이내이다.

입력

첫 줄에 숙제의 개수 N (1<=N<=200,000)이 들어온다. 다음 줄부터 N+1번째 줄까지 i+1번째 줄에 i번째 문제에 대한 데드라인과 풀면 받을 수 있는 컵라면 수가 공백으로 구분되어 입력된다.

출력

첫 줄에 동호가 받을 수 있는 최대 컵라면 수를 출력한다.

예제 입력

7 1 6 1 7 3 2 3 1 2 4 2 5 6 1

예제 출력 

15

풀이

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class B1781 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        ArrayList<Homework> hwList = new ArrayList<>();
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int date = Integer.parseInt(st.nextToken());
            int ramen = Integer.parseInt(st.nextToken());
            hwList.add(new Homework(date, ramen));
        }
        Collections.sort(hwList);
        for(int i=0;i<hwList.size();i++)
            System.out.println(hwList.get(i).date);

        long sum = 0;
        for (int i = 0; i < n; i++) {
            int deadLine = hwList.get(i).date;
            int ramen = hwList.get(i).ramen;
            pq.add(ramen);
            while (!pq.isEmpty() && pq.size() > deadLine) pq.poll();
        }
        while (!pq.isEmpty())
            sum += pq.poll();
        System.out.println(sum);
    }

}

class Homework implements Comparable<Homework> {
    int date;
    int ramen;

    public Homework(int date, int ramen) {
        this.date = date;
        this.ramen = ramen;
    }

    @Override
    public int compareTo(Homework o) {
        return this.date - o.date;
    }
}

 

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

 

1781번: 컵라면

상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라�

www.acmicpc.net

 

'Algorithm > BaekJoon' 카테고리의 다른 글

[BOJ] 2533. 사회망 서비스(SNS)  (0) 2021.05.09
[BOJ] 4716. 풍선  (0) 2020.08.19
[BOJ] 3988. 수 고르기(java)  (0) 2020.08.19
[BOJ] 10799.쇠막대기  (0) 2020.08.12
[BOJ] 1181. 단어정렬  (0) 2020.08.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함