티스토리 뷰

Algorithm

[백준] G4 2075 N번째 큰 수 (java)

코딩브론즈 2021. 1. 6. 02:53

www.acmicpc.net/problem/2075

 

2075번: N번째 큰 수

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

www.acmicpc.net

 

풀이

 

1) PriorityQueue를 쓸거임. <- 내림차순으로 받아야 하므로 Collections.reversOrder()를 조진다.

2) 입력값을 pq에 다 때려 넣는다.

3 N-1개 만큼 pq에서 뺀다

4) pq.peek()를 출력한다.

 

주의사항

 

1) 없다

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;

public class BJ_G4_2075_N번째큰수 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;
	static int N;
	static Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		N = Integer.parseInt(input.readLine());
		for(int r=0; r<N; r++) {
			tokens = new StringTokenizer(input.readLine());
			for(int c=0; c<N; c++) {
				pq.offer(Integer.parseInt(tokens.nextToken()));
			}	
		}
		for(int i=0; i<N-1; i++) {
			pq.poll();
		}
		System.out.println(pq.peek());
	}

	static String src =
			"5\r\n" + 
			"12 7 9 15 5\r\n" + 
			"13 8 11 19 6\r\n" + 
			"21 10 26 31 16\r\n" + 
			"48 14 28 35 25\r\n" + 
			"52 20 32 41 49";
}

 

 

후기

 

 "카드 정렬하기" 문제와 같이 pq만 알면 누구나 풀 수 있는 문제이다.

다만 내림차순으로 정렬하는 것이 기억이 안나서 구글링을 했는데 기존에 쓰던 Comparator외에 Collections.reverseOrder() 를 쓰는 법을 알게 되었다.

새로운 내용을 학습해서 만족스러운 문제이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함