티스토리 뷰
12018번: Yonsei TOTO
연세대학교 수강신청이 얼마 전부터 바뀌어, 마일리지 제도로 바뀌었다. 이 제도는 각각의 학생들에게 마일리지를 주어 듣고 싶은 과목에 마일리지를 과목당 1~36을 분배한다. 그리고 모두 분배
www.acmicpc.net
풀이
1) PriorityQueue queue에 각 과목을 수강하기위한 최소 마일리지를 담을거임.
2) PriorityQueue pq (내림차순)에 신청인원들이 넣은 마일리지를 담는다
3) 경우를 나누어 따져본다.
3-1) 신청인원 >= 수강인원 : pq에서 수강인원수 만큼 뽑고 가장 마지막에 뽑은 마일리지 +1을 queue에 담는다.
3-2) 신청인원 < 수강인원 : queue에 1을 담는다. (마일리지 1만 있어도 수강할 수 있음)
4) 마일리지 < queue.poll() 일 때까지 queue.poll을 마일리지에서 빼고 answer++
5) answer 출력
주의사항
1) pq는 Collections.reverseOrder()를 써야함
package com.baekJoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class BJ_S3_12018_YonseiTOTO {
static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokens;
static int N, M;
public static void main(String[] args) throws NumberFormatException, IOException {
input = new BufferedReader(new StringReader(src));
tokens = new StringTokenizer(input.readLine());
N = Integer.parseInt(tokens.nextToken());
M = Integer.parseInt(tokens.nextToken());
Queue<Integer> queue = new PriorityQueue<Integer>();
for(int n=0; n<N; n++) {
tokens = new StringTokenizer(input.readLine());
int P = Integer.parseInt(tokens.nextToken());
int L = Integer.parseInt(tokens.nextToken());
tokens = new StringTokenizer(input.readLine());
Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int p=0; p<P; p++) {
pq.offer(Integer.parseInt(tokens.nextToken()));
}
if(P >= L) {
for(int l=0; l<L-1; l++) {
pq.poll();
}
queue.offer(pq.poll());
}else {
queue.offer(1);
}
}
int answer = 0;
while(!queue.isEmpty()) {
int temp = queue.poll();
if(M >= temp) {
M -= temp;
answer++;
}else {
break;
}
}
System.out.println(answer);
}
static String src =
"5 76\r\n" +
"5 4 \r\n" +
"36 25 1 36 36\r\n" +
"4 4\r\n" +
"30 24 25 20\r\n" +
"6 4\r\n" +
"36 36 36 36 36 36\r\n" +
"2 4\r\n" +
"3 7\r\n" +
"5 4\r\n" +
"27 15 26 8 14";
}
후기
그리디문제를 찾다가 풀게된 문제이다. 하지만 그리디의 성격보다는 정렬과 PriorityQueue의 성격이 더 짙은 문제였다.
그래도 이번 기회에 Collections.reverseOrder()를 머리속에 각인 시키게 되었다.
'Algorithm' 카테고리의 다른 글
[백준] G5 13549 숨바꼭질 3 (java) (0) | 2021.01.19 |
---|---|
[백준] B3 2875 대회 or 인턴 (java) (0) | 2021.01.18 |
[백준] S3 1463 1로 만들기 (java) (0) | 2021.01.18 |
[백준] G5 2116 주사위 쌓기 (java) (0) | 2021.01.17 |
[백준] G4 1967 트리의 지름 (java) (0) | 2021.01.17 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- laugh4mile
- 리액트
- react native
- java
- DFS
- 우선순위큐
- 백준
- 코딩새내기
- S2
- 그리디
- 객체지향
- Spring
- 구현
- SWEA
- g4
- 문자열
- G5
- Spring Boot
- 알고리즘
- 현꾸라지
- 자바
- PriorityQueue
- 리액트 네이티브
- 다익스트라
- S3
- 백트래킹
- map
- 시뮬레이션
- react
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함