-
12018 Yonsei TOTO백준/우선순위 큐 2021. 10. 21. 20:42
https://www.acmicpc.net/problem/12018
12018번: Yonsei TOTO
연세대학교 수강신청이 얼마 전부터 바뀌어, 마일리지 제도로 바뀌었다. 이 제도는 각각의 학생들에게 마일리지를 주어 듣고 싶은 과목에 마일리지를 과목당 1~36을 분배한다. 그리고 모두 분배
www.acmicpc.net
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); PriorityQueue<Integer> min = new PriorityQueue<>(); for(int j=0;j<N;j++) { StringTokenizer st1 = new StringTokenizer(br.readLine(), " "); int A = Integer.parseInt(st1.nextToken()); int B = Integer.parseInt(st1.nextToken()); StringTokenizer st2 = new StringTokenizer(br.readLine(), " "); PriorityQueue<Integer> mileage = new PriorityQueue<>(Collections.reverseOrder()); // 우선순위 큐에 값이 내림차순 정렬해서 들어감 for(int i =0; i<A;i++) { mileage.add(Integer.parseInt(st2.nextToken())); } int value=-1; for(int k=0;k<B;k++) { if(B<=A) { value = mileage.poll(); }else { value = 1; } } min.add(value); } int sum =0; int result=0; for(int i=1;i<=N;i++) { sum+=min.poll(); if(sum>M) { result=i-1; break; }else if (sum==M) { result=i; break; }else if (sum<M) { if(i==N) { result=N; break; }else { continue; } } } System.out.println(result); } }
어렵지는 않았는데 아래, result를 구하는 for 문에서 많이 헤매여서 시간을 보냈다 ㅠ
sts 에서는 답이 나오는데 백준에서는 안된다고 하니 ㅠ
이럴 때는 백준 문제에 나온 예제 입력말고
내가 여러가지 입력을 만들면서 어느 부분이 틀렸는지
중간중간 System.out.println(result) 이런식으로 중간중간 찍어가면서 뭐가 문제인지 확인하는게 좋을 듯 하다
'백준 > 우선순위 큐' 카테고리의 다른 글
14235 크리스마스 선물 (자바) (0) 2022.02.03 15903 카드 합체 놀이 (0) 2021.10.20