본문 바로가기
programming/알고리즘 풀이

[백준(Baekjoon)] 14235. 크리스마스 선물

by 몽구스_ 2021. 8. 27.
728x90

 

 

[백준(Baekjoon)] 14235. 크리스마스 선물

 

 

 

14235번: 크리스마스 선물

크리스마스에는 산타가 착한 아이들에게 선물을 나눠준다. 올해도 산타는 선물을 나눠주기 위해 많은 노력을 하고 있는데, 전세계를 돌아댕기며 착한 아이들에게 선물을 나눠줄 것이다. 하지만

www.acmicpc.net

 

 

[입력]

 

첫 번째 줄에서는 아이들과 거점지를 방문한 횟수 n이 주어진다.(1≤n≤5,000)

다음 n줄에는 a가 들어오고, 그 다음 a개의 숫자가 들어온다. 이는 거점지에서 a개의 선물을 충전하는 것이고, 그 숫자들이 선물의 가치이다. 만약 a가 0이라면 거점지가 아닌 아이들을 만난 것이다. 선물의 가치는 100,000보다 작은 양의 정수이다.(1≤a≤100)

 

 

[출력]

 

a가 0일 때마다, 아이들에게 준 선물의 가치를 출력하시오. 만약 줄 선물이 없다면 -1을 출력하라. 적어도 하나의 출력이 있음을 보장한다.

 

 

[풀이]

 

선물의 가치가 큰 것부터 나눠주니까 큐에 저장할때부터 오름차순으로 정렬되게 우선순위큐를 사용한다.

그리고 0일때는 큐가 비어있을 경우 -1을 출력하고 큐에 선물이 있을 경우 꺼내 출력한다.

0이 아닌 양수일 경우에는 뒤에 거점을 들러서 선물을 offer한다.

 

 

 

[코드]

 

public class bj14235 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		int N = Integer.parseInt(br.readLine());
		PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());
		//우선순위큐 오름차순
        
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			if(a == 0) { //0일때 나눠줌
				if(q.isEmpty()) { //큐가 비어있으면 줄게 없어서 -1
					System.out.println(-1);
				}else { //큐에 선물 있으면 출력
					System.out.println(q.poll());
				}
			}else { //0이 아닐때는 선물 담음
				for (int j = 0; j < a; j++) {
					int present = Integer.parseInt(st.nextToken());
					 q.offer(present);
				}
			}
		}
	}

}

'programming > 알고리즘 풀이' 카테고리의 다른 글

[leetcode] 49. Group Anagrams  (0) 2021.10.06
[leetcode] 1. Two Sum  (0) 2021.10.02
[백준(Baekjoon)] 1260. DFS와 BFS  (0) 2021.08.26
[백준(Baekjoon)] 2257. 화학식량  (0) 2021.08.25
[백준(Baekjoon)] 1759. 암호 만들기  (0) 2021.08.24

댓글