๐ก ๋ฌธ์ ์์ฝ
- N x N ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
- ์ด ๋ฐฐ์ด์์ N๋ฒ์งธ๋ก ํฐ ์๋ฅผ ์ฐพ์ ์ถ๋ ฅํ๋ ๋ฌธ์
๐
์กฐ๊ฑด ์์ฝ
- ๋ฐฐ์ด์ ์ด N๊ฐ์ ์ค, ๊ฐ ์ค๋ง๋ค N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ชจ๋ ์๋ ์ ์์ด๋ฉฐ, ์ค๋ณต ๊ฐ๋ฅ
- ์๊ฐ ์ ํ: 1์ด / ๋ฉ๋ชจ๋ฆฌ ์ ํ: 12MB
๐ ์
๋ ฅ ํ์
N
A[1][1] A[1][2] ... A[1][N]
A[2][1] A[2][2] ... A[2][N]
...
A[N][1] A[N][2] ... A[N][N]
โ
์ถ๋ ฅ ํ์
- N๋ฒ์งธ๋ก ํฐ ์ ์ถ๋ ฅ
๐ง ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- PriorityQueue (์ต์ ํ) ๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ N๊ฐ์ ์์๋ฅผ ์ ์ง
- ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ์ํํ๋ฉด์
- ํ์ ์ถ๊ฐ
- ํฌ๊ธฐ๊ฐ N์ ์ด๊ณผํ๋ฉด ๊ฐ์ฅ ์์ ์ ์ ๊ฑฐ (
poll())
- ๋ง์ง๋ง์
peek()ํ๋ฉด N๋ฒ์งธ ํฐ ์๊ฐ ๋จ๊ฒ ๋จ
๐ ์ ์ฒด ์ฝ๋
import java.io.*;
import java.util.*;
public class N๋ฒ์งธํฐ์ {
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<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int num = Integer.parseInt(st.nextToken());
pq.offer(num);
if (pq.size() > N) {
pq.poll();
}
}
}
System.out.println(pq.peek());
}
}
โฑ๏ธ ์๊ฐ ๋ณต์ก๋
| ๋จ๊ณ |
์๊ฐ |
| ์ ์ฒด ํ์ |
O(N^2) |
| ํ ์ฝ์
/์ญ์ |
O(log N) |
| ์ด ๋ณต์ก๋ |
O(N^2 log N) |
โก N <= 1500 ์ด๋ฏ๋ก ํต๊ณผ ๊ฐ๋ฅ
โ
์ฃผ์ ๋ฉ์๋ ์์ฝ
| ๋ฉ์๋ |
์ค๋ช
|
add(E e) |
ํ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. (๊ณต๊ฐ ๋ถ์กฑ ์ ์์ธ ๋ฐ์) |
offer(E e) |
ํ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. (add()์ ์ ์ฌํ๋ ์คํจ ์ false ๋ฐํ) |
poll() |
์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํ (๋น์ด ์์ผ๋ฉด null) |
remove() |
poll()๊ณผ ์ ์ฌํ๋, ํ๊ฐ ๋น์ด ์์ผ๋ฉด ์์ธ ๋ฐ์ |
peek() |
๊ฐ์ฅ ๋์ ์ฐ์ ์์ ์์๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋ฐํ (๋น์ด ์์ผ๋ฉด null) |
element() |
peek()๊ณผ ์ ์ฌํ๋, ํ๊ฐ ๋น์ด ์์ผ๋ฉด ์์ธ ๋ฐ์ |
size() |
ํ์ฌ ํ์ ์์ ๊ฐ์๋ฅผ ๋ฐํ |
isEmpty() |
ํ๊ฐ ๋น์ด ์๋์ง ์ฌ๋ถ ๋ฐํ |
clear() |
ํ์ ๋ชจ๋ ์์ ์ ๊ฑฐ |
contains(Object o) |
ํน์ ์์ ํฌํจ ์ฌ๋ถ ํ์ธ |
toArray() |
ํ์ ์์๋ค์ ๋ฐฐ์ด๋ก ๋ฐํ |
iterator() |
ํ์ ์์๋ค์ ์ํํ Iterator ๋ฐํ (์ ๋ ฌ ์์ ์๋) |
๐ ์ฐ์ ์์ ์ค์ ๋ฐฉ๋ฒ
- ๊ธฐ๋ณธ: ์ค๋ฆ์ฐจ์ (Min-Heap)
PriorityQueue<Integer> pq = new PriorityQueue<>(); // ๊ธฐ๋ณธ min-heap
- ๋ด๋ฆผ์ฐจ์: Max-Heap
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
- ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ:
PriorityQueue<String> pq = new PriorityQueue<>((a, b) -> b.length() - a.length());