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);
}
}