1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
key word:
Priority Queue
N*N๊ฐ์ ์ ์ค N ๋ฒ์งธ ํฐ ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋๋ ์ค๋ฆ ์ฐจ์ PriorityQueue๋ฅผ ๋ง๋ค์ด์ ํด๋น queue์ size๋ฅผ N๊ฐ๋ก ์ ์งํ๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋งจ ๋ง์ง๋ง ํ์ ๊ฐ N๊ฐ๋ฅผ PQ์ ๋ด๋๋ค. (๋งจ ๋ง์ง๋ง ํ์ ๊ฐ ์ด ๋ณ๋ก ์ต๊ณ ๊ฐ ์ด๋ค.)
- ๋ฐฐ์ด์ ํ ํ์ฉ ์ฌ๋ผ๊ฐ์ ๊ฐ๋ค์ Priority Queue์ peek()๊ฐ๊ณผ ๋น๊ตํ๋ค.
(1)peek()
<ํ ์กฐํ ์ค์ธ ๊ฐ
: peek()์ poll() ํด์ ๋ฒ๋ฆฌ๊ณ , ํ ์กฐํ์ค์ธ ๊ฐ์ PQ์ ๋ฃ๋๋ค.
(2)peek()
>=ํ ์กฐํ ์ค์ธ ๊ฐ
: PQ๋ฅผ N๊ฐ๋ก ์ ์งํ๋ ์ด์ ๋ N๋ฒ์งธ ํฐ์๋ฅผ ์ฐพ๊ธฐ ์ํด์ ์ด๋ค. ํ์ฌ๋ PQ ์์ ์ต์๊ฐ๋ณด๋ค ์์ผ๋ฏ๋ก N๋ฒ์งธ ํฐ ์๊ฐ ๋๊ธฐ ๋ง๋ฌดํ๋ค. ๊ทธ๋ฅ ๋์ด๊ฐ๋ค. - ์ด๋ฐ ์์ผ๋ก ํ๋ฉด PQ.peek()์ N๋ฒ์งธ ํฐ ์๊ฐ ๋ด๊ธฐ๋ฏ๋ก, ๊ทธ ์๋ฅผ ์ถ๋ ฅํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.nio.Buffer;
import java.util.*;
public class Main {
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());
}
}
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
pq.add(arr[N-1][i]);
}
for(int i = N-2; i>=0; i--){
for(int j = 0; j< N; j++){
if(pq.peek() < arr[i][j]) {
pq.poll();
pq.add(arr[i][j]);
}
}
}
System.out.println(pq.peek());
}
}
4. ์ฑ์ฅ ํ๊ธฐ
๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋ ์ ๋ฐฉ์ ๋ณด๋ค ์ฌ์ด ๋ฐฉ์์ด ์์๋ค.
- PQ์ ์ ๋ ฌ ๊ธฐ์ค์ ๋ด๋ฆผ ์ฐจ์์ผ๋ก ํ๋ค.
- PQ์ ๋ชจ๋ ๊ฐ์ ๋ฃ๋๋ค.
- N-1๊ฐ๋ฅผ
poll()
ํ๋ค.
๊ทธ๋ฌ๋ฉด PQ.peek()์ด N๋ฒ์งธ ํฐ ์๊ฐ ๋๋ค. ํ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
import java.io.*;
import java.nio.Buffer;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>((o1,o2) -> o2 - o1);
for(int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j = 0; j<N; j++){
pq.add(Integer.parseInt(st.nextToken()));
}
}
for (int i = 0; i < N-1; i++) {
pq.poll();
}
System.out.println(pq.peek());
}
}
0