본문 바로가기
Study or Lecture/항해 99클럽 코딩테스트 스터디

항해 99클럽 코딩테스트 스터디 20일차 TIL (자바 / 비기너)

by yoondoo 2024. 11. 16.
728x90

<오늘의 학습 키워드>

- 우선순위큐

<오늘의 문제>

제목 : 백준 / 실버3 / 2075번 N번째 큰 수

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

<풀이>

정답은 더보기

더보기
package BOJ.자료구조.N번쨰큰수_2075.insub2004_241116;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());

        PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
        for (int i = 0; i < num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            while (st.hasMoreElements()) {
                queue.add(Integer.parseInt(st.nextToken()));
            }
        }

        int answer = 0;
        while (num != 0) {
            answer = queue.poll();
            num--;
        }

        System.out.println(answer);
    }
}

 

  • 어제와 마찬가지로 우선순위큐를 사용했고 다른점은 우선순위큐의 생성자 파라미터로 정렬을 거꾸로 할 수 있는 Collections 객체를 넣어주었다.
  • 입력을 받는 부분에서도 StringTokenizer를 사용하여 구분자를 기본 공백으로 해서 입력받았다.
  • 마지막 N번째를 돌 때까지 큐에서 꺼내고 마지막 N번째 수를 출력했다.

<결론, 주의할점>

  • 마지막에 큐에서 N번째까지 꺼내지 않는 방법이 있었다.
    • 우선순위큐를 기본 생성자로 생성한다.
    • 큐에 숫자를 넣는것과 동시에 큐의 사이즈가 N을 넘으면 하나를 뺀다. 
    • 그러면 제일 마지막에 큐의 가장 앞에는 N번째 숫자만 남아있다.
    • ex) [ N, N + 1, N + 2 ... 제일 큰 수 ]
    • 정답을 출력할 땐 poll 한 번만 해주면 된다.
반응형

댓글