상세 컨텐츠

본문 제목

14235. 크리스마스 선물

Algorithm

by aeongiii 2024. 11. 30. 10:01

본문


1. 문제 분석
    1) N을 입력받은 뒤, N개의 줄을 입력받는다.
    2) 각 줄의 처음에는 정수 a가 있다.
    3) 0일 경우 최댓값을 출력 및 삭제하고, a가 0이 아닐경우 그 다음에 들어오는 a개의 숫자를 입력받아 저장한다.

2. 제약 조건
   1 <= N <= 5000
   1 <= a <= 100

3. 의사결정
    1) 첫째줄에서 N을 받고, 최대 힙을 선언한다. 한줄에 여러 숫자가 들어올 수 있으므로 StringTokenizer를 사용한다.
    2) N만큼 for문을 돌리고, 입력값을 받는다.
      (1) 입력값이 0일 경우
        - 힙이 비어있다면 -1 출력
        - 비어있지 않다면 최댓값 출력 및 삭제
      (2) 입력값이 0이 아닌 a일 경우
        - a개의 숫자를 받아서 힙에 저장한다.



 

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine()); // N 받기

        PriorityQueue<Integer> maxheap = new PriorityQueue<>((a, b) -> b - a); // 최대 힙 선언

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken()); // a 받기

            if (a == 0) { // a = 0일 경우, 아이들에게 선물을 준다.
                System.out.println(maxheap.isEmpty() ? -1 : maxheap.poll());
            } else { // a != 0 일 경우, a개의 선물을 저장한다.
                for (int j = 0; j < a; j++) {
                    int present = Integer.parseInt(st.nextToken());
                    maxheap.add(present);
                }
            }
        }
    }
}

 

'Algorithm' 카테고리의 다른 글

1655. 가운데를 말해요  (0) 2024.11.30
9375. 패션왕 신해빈  (1) 2024.11.30
1927. 최소 힙  (0) 2024.11.30
19638. 센티와 마법의 뿅망치  (4) 2024.11.29
15829. Hashing  (0) 2024.11.29

관련글 더보기