본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩테스트/백준 알고리즘] 1927번 - 최소 힙 (Java, 자바 풀이)

by 코코의 주인 2022. 12. 14.

문제

https://www.acmicpc.net/problem/1927

 

1927번: 최소 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


문제 설명


문제 풀이

 처음에 패기있게 바이너리 트리를 직접 구현했으나 시간초과가 나왔다. 그래서 어쩔수 없이 우선순위 큐를 사용해서 구현했다.

 근데 같은 로직을 switch문으로 구현하면 시간 초과가 나고 if문으로 해결해야 성공이 됐다. switch가 if에 비해 실행시간이 빠른 걸로 알고 있는데 의외였다. 아마 else랑 default의 속도 차이가 있지 않을까 추측해본다.


코드

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Queue<Integer> pq = new PriorityQueue<>();
        int N = sc.nextInt();
        while(N-- > 0) {
            int x = sc.nextInt();
            if(x == 0) {
                if (pq.isEmpty()) {
                    System.out.println(0);
                } else {
                    System.out.println(pq.poll());
                }
            }
            else
                pq.offer(x);
        }
    }
}

댓글