알고리즘
[백준] 문제 14235 : 크리스마스 선물 - JAVA
DoosanBaek
2024. 11. 30. 23:43
[링크] : https://www.acmicpc.net/problem/14235
💎 문제 분석 & 제약 조건
문제 분석 :
차례대로 방문한 아이들과 거점지의 정보들이 주어졌을 때,
아이들이 준 선물들의 가치들을 출력, 만약 아이들에게 줄 선물이 없다면 -1을 출력
제약 조건 :
방문한 횟수 n , (1≤n≤5,000)
🚀 의사 결정
1. BufferedReader 로 입력받고
2. 가장 가치가 큰 선물을 출력 -> 우선순위 큐의 개념을 활용 , 아이들에게 가장 큰 값의 선물을 주는데 a개를 준다.
3. 반복문을 통해 우선순위 큐에서 , 가장 큰 값의 선물을 꺼내주고, 선물을 주는 횟수를 a 가 0 일때마다 카운트한 값
을 출력한다.
📜 소스코드(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
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));
StringBuilder sb = new StringBuilder();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); // 우선순위 큐
int n = Integer.parseInt(br.readLine()); // 방문한 횟수 n
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
//StringTokenizer 사용 , BufferedReader의 readLine() 메서드로 읽어온 값을 토큰화해서
int a = Integer.parseInt(st.nextToken()); // 선물 개수 , 문자열로 받은 내용을 Integer.parseInt로 형변환 해서 a 에 선물 개수 할당하고
// 만약 a가 0 ( 선물개수가 0 이라면)
if (a == 0) {
if (pq.isEmpty()) {
sb.append(-1).append("\n"); // -1 출력하고
} else {
sb.append(pq.poll()).append("\n"); // 가장 큰 값(최대치) 선물 , pq.poll로 가져와서 출력
}
} else { // a가 0 이아니면 , 선물 줘야지 , 선물준거 출력하려면
for(int j= 0; j < a; j++) {
int count = Integer.parseInt(st.nextToken());
pq.offer(count); // 선물 주는 횟수 우선순위큐에 넣어주고
}
}
}
System.out.println(sb); // StringBuilder로 한번에 모았다가 출력
}
}