[Boj_11286] ์ ๋๊ฐ ํ
๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/11286
11286๋ฒ: ์ ๋๊ฐ ํ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1≤N≤100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ 0์ด ์๋๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ 0
www.acmicpc.net
โธ ๋ฌธ์
์ ๋๊ฐ ํ์ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ง์ํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋ฐฐ์ด์ ์ ์ x (x ≠ 0)๋ฅผ ๋ฃ๋๋ค.
- ๋ฐฐ์ด์์ ์ ๋๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ๊ทธ ๊ฐ์ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ค. ์ ๋๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฐ์ด ์ฌ๋ฌ๊ฐ์ผ ๋๋, ๊ฐ์ฅ ์์ ์๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ทธ ๊ฐ์ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ค.
ํ๋ก๊ทธ๋จ์ ์ฒ์์ ๋น์ด์๋ ๋ฐฐ์ด์์ ์์ํ๊ฒ ๋๋ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ ์์ฐ์๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ 0์ด๋ผ๋ฉด ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๊ณ ๊ทธ ๊ฐ์ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ ๋ ฅ๋๋ ์์ฐ์๋ 231๋ณด๋ค ์๋ค.
โธ ์ถ๋ ฅ
์ ๋ ฅ์์ 0์ด ์ฃผ์ด์ง ํ์๋งํผ ๋ต์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ฐฐ์ด์ด ๋น์ด ์๋ ๊ฒฝ์ฐ์ธ๋ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ผ๊ณ ํ ๊ฒฝ์ฐ์๋ 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 1
- ๐ ๋ฌธ์ ์ ํ : ์๋ฃ๊ตฌ์กฐ, ์ฐ์ ์์ ํ
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
- ์ฐ์ ์์ ํ(Priority Queue)๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ์ ๋๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ํด์ผ ํ๋ฏ๋ก, ์ฐ์ ์์ ํ์ ์ ๋ ฌ ๊ธฐ์ค์ ์๋ก ์ ์ํด ์ฃผ์๋ค.
- ์ฐ์ ์์ ํ์ ์ ๋ ฌ ๊ธฐ์ค
- ๋ ์์ ์ ๋๊ฐ์ ๋น๊ตํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ๋ ์์ ์ ๋๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ์ ๋ ฅ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋น๊ตํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 28800KB
์๊ฐ : 424ms
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<>((x, y) -> {
// x, y์ ๋น๊ต ์ฐ์ ์์ ๊ฒฐ์
// x, y์ ์ ๋๊ฐ
int abs1 = Math.abs(x);
int abs2 = Math.abs(y);
if (abs1 > abs2) { // ์ ๋๊ฐ ๊ธฐ์ค์ผ๋ก ์ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด ์๋ฆฌ ๋ฐ๊พธ๊ธฐ
return abs1 - abs2;
} else if (abs1 == abs2) { // ์ ๋๊ฐ ๊ธฐ์ค์ผ๋ก ๋ ๊ฐ์ด ๊ฐ๋ค๋ฉด ์์ ์์ผ๋ก ๋ณด๋ด๊ธฐ
return x - y;
}
return -1;
});
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());
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์