๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1927
1927๋ฒ: ์ต์ ํ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ ์์ฐ์๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ 0
www.acmicpc.net
โธ ๋ฌธ์
๋๋ฆฌ ์ ์๋ ค์ง ์๋ฃ๊ตฌ์กฐ ์ค ์ต์ ํ์ด ์๋ค. ์ต์ ํ์ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ง์ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ๋ฐฐ์ด์ ์์ฐ์ x๋ฅผ ๋ฃ๋๋ค.
- ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ๊ทธ ๊ฐ์ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ค.
ํ๋ก๊ทธ๋จ์ ์ฒ์์ ๋น์ด์๋ ๋ฐฐ์ด์์ ์์ํ๊ฒ ๋๋ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ ์์ฐ์๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ 0์ด๋ผ๋ฉด ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๊ณ ๊ทธ ๊ฐ์ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ์ด๋ค. x๋ 231๋ณด๋ค ์์ ์์ฐ์ ๋๋ 0์ด๊ณ , ์์ ์ ์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
โธ ์ถ๋ ฅ
์ ๋ ฅ์์ 0์ด ์ฃผ์ด์ง ํ์๋งํผ ๋ต์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ฐฐ์ด์ด ๋น์ด ์๋ ๊ฒฝ์ฐ์ธ๋ฐ ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๋ผ๊ณ ํ ๊ฒฝ์ฐ์๋ 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 2
- ๐ ๋ฌธ์ ์ ํ : ์๋ฃ๊ตฌ์กฐ, ์ฐ์ ์์ ํ
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
- ์ฐ์ ์์ ํ(Priority Queue)๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- PriorityQueue<Integer> pq = new PriorityQueue<>();
- ์์ ํํ๋ก ์ฌ์ฉํด ์ฃผ๋ฉด ์์ ์ซ์๊ฐ ์ฐ์ ์์๊ฐ ๋๋ฏ๋ก, ์ต์ ํ์ ๊ตฌํํ ์ ์๋ค.
๐ ํ(Heap)์ด๋ ?
- ์ต์๊ฐ ๋๋ ์ต๋๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๊ธฐ ์ํด ์์ ์ด์งํธ๋ฆฌ ํํ๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๐ธ ํ์ ์ข ๋ฅ
- ์ต์ ํ(Min Heap)
- ๋ถ๋ชจ ๋ ธ๋ ๊ฐ์ด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
- ๋ฃจํธ ๊ฐ์ ์ ์ฅ๋ ์์ ์ค ๊ฐ์ฅ ์๋ค.
- ์ต๋ ํ(Max Heap)
- ๋ถ๋ชจ ๋ ธ๋ ๊ฐ์ด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค.
- ๋ฃจํธ ๊ฐ์ ์ ์ฅ๋ ์์ ์ค ๊ฐ์ฅ ํฌ๋ค.
๐ ์ฐ์ ์์ ํ(Priority Queue)๋ ?
- ์ผ๋ฐ Queue๊ฐ FIFO(First In First Out)์ ํน์ง์ ๊ฐ์ง ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ,
- ๋ฐ์ดํฐ๊ฐ ๋ค์ด์จ ์์์ ์๊ด์์ด ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋ด๋ถ ์์๋ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์, ์๊ฐ ๋ณต์ก๋๋ O(NLogN)์ด๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 25656KB
์๊ฐ : 280ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine()); // ์ฐ์ฐ์ ๊ฐ์
PriorityQueue<Integer> pq = new PriorityQueue<>(); // ์ค๋ฆ์ฐจ์ ๊ธฐ์ค
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(br.readLine());
if (num == 0) { // ๋ค์ด์ค๋ ๊ฐ์ด 0์ด๋ผ๋ฉด
if (pq.isEmpty()) { // ๋ฐฐ์ด์ด ๋น์ด์๋ ๊ฒฝ์ฐ๋ผ๋ฉด
sb.append(0).append("\n"); // 0 ์ถ๋ ฅ
} else { // ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ ์ถ๋ ฅํ๊ณ ๊ทธ ๊ฐ ์ ๊ฑฐ
sb.append(pq.poll()).append("\n");
}
} else { // ๋ค์ด์ค๋ ๊ฐ์ด 0์ด ์๋๋ผ๋ฉด
pq.offer(num); // ๋ฐฐ์ด์ ๊ฐ ์ถ๊ฐ
}
}
System.out.println(sb.toString());
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_11279] ์ต๋ ํ (0) | 2023.11.13 |
---|---|
[Boj_11286] ์ ๋๊ฐ ํ (0) | 2023.11.13 |
[Boj_9251] LCS (1) | 2023.11.10 |
[Boj_2167] 2์ฐจ์ ๋ฐฐ์ด์ ํฉ (1) | 2023.11.04 |
[Boj_2961] ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (1) | 2023.11.01 |