문제설명
N*N 개의 수를 입력받고 N번째로 큰 수를 출력하는 문제입니다.
작동 순서
1. N을 입력받습니다.
2. N개의 수열을 N번 입력받고 우선순위 큐에 저장합니다.
3. 우선순위 큐에 저장되어 있는 수를 앞에서부터 N-1개 제거합니다.
4. 우선순위 큐의 가장 앞에 있는 수를 출력합니다.(N-1개를 제거했으므로 N번째로 큰 수입니다.)
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class 백준_2075번_N번째큰수 {
static PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) maxHeap.add(Integer.parseInt(st.nextToken()));
}
for(int i=0;i<N-1;i++){
maxHeap.poll();
}
System.out.print(maxHeap.poll());
}
}
후기
문제에 나와있는 규칙을 보고 그 규칙으로 문제를 풀어야 하나 했는데 그냥 단순하게 생각하면 쉽게 풀 수 있는 문제였습니다. 문제를 풀 때 너무 문제에 나와있는 글들에 집착하지 않도록 해야할 것 같습니다.