[백준] 2075번 N번째 큰 수 JAVA 풀이

권용환·2021년 12월 2일
0

백준

목록 보기
31/36
post-thumbnail

문제 바로가기

나의 풀이

Point 클래스에 row와 col, value 값을 넣어두고 PriorityQueue 를 사용해서 매번 가장 큰 값을 꺼낼 수 있도록 했습니다. value 값을 비교해서 꺼내기 위해 CompareTo 메서드를 오버라이딩 했습니다.


나의 코드

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

class Main {

	static class Point implements Comparable<Point> {
		int row;
		int col;
		int value;

		public Point(int row, int col, int value) {
			this.row = row;
			this.col = col;
			this.value = value;
		}

		@Override
		public int compareTo(Point target) {
			return this.value <= target.value? 1 : -1;
		}
	}

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int[][] arr = new int[n][n];

		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int j = 0; j < n; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		Queue<Point> queue = new PriorityQueue<>();
		for (int i = 0; i < n; i++) {
			queue.offer(new Point(n - 1, i, arr[n - 1][i]));
		}

		for (int i = 0; i < n - 1; i++) {
			Point min = queue.poll();
			queue.offer(new Point(min.row - 1, min.col, arr[min.row - 1][min.col]));
		}

		System.out.println(queue.poll().value);
	}
}
profile
마구 낙서하는 블로그입니다

0개의 댓글