๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2696)
< ์ค์๊ฐ ๊ตฌํ๊ธฐ >
๋ฌธ์ ํ์ด
๋ฐฑ์ค 1655๋ฒ ๋ฌธ์ ์ ๋งค์ฐ ๋น์ทํ ๋ฌธ์ ์ด๋ค.
https://melody-coding.tistory.com/342
1655๋ฒ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ ํ์๋ฒ์งธ ์๋ฅผ ์ฝ์ ๋๋ง๋ค ์ค์๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ฉฐ, ํ ์คํธ ์ผ์ด์ค๊ฐ ์ฃผ์ด์ง๋ค๋ ๊ฒ์ด๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _2696_ { // ์ค์๊ฐ ๊ตฌํ๊ธฐ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int t = Integer.parseInt(bf.readLine());
PriorityQueue<Integer> left = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> right = new PriorityQueue<>();
for (int i = 0; i < t; i++) {
int m = Integer.parseInt(bf.readLine());
bw.write(Integer.toString(m / 2 + 1) + "\n");
int idx = 0;
for (int j = 0; j < (m / 10 + 1); j++) {
st = new StringTokenizer(bf.readLine());
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
idx += 1;
if (left.size() == 0)
left.add(num);
else {
if ((right.size() > 0 && right.peek() >= num) || left.peek() > num) {
left.add(num);
} else {
right.add(num);
}
if (left.size() - right.size() > 1) {
int temp = left.poll();
right.add(temp);
} else if (right.size() - left.size() > 1) {
int temp = right.poll();
left.add(temp);
}
}
if (idx % 2 == 1) {
if (left.size() > right.size()) {
bw.write(Integer.toString(left.peek()) + " ");
} else {
bw.write(Integer.toString(right.peek()) + " ");
}
if ((idx / 2 + 1) % 10 == 0)
bw.write("\n");
}
}
}
bw.append("\n");
left.clear();
right.clear();
}
bw.flush();
}
}
Main
๋ณ์)
t : ํ ์คํธ ์ผ์ด์ค ๊ฐ์
left : ๋ด๋ฆผ์ฐจ์ ์ฐ์ ์์ ํ
right : ์ค๋ฆ์ฐจ์ ์ฐ์ ์์ ํ
m : ์์ด์ ํฌ๊ธฐ
idx : ํ์ฌ๊น์ง ์ฝ์ ์์ ์
num : ์์ด์ ์์
- ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์(t) ์ ๋ ฅ
- ํ ์คํธ ์ผ์ด์ค ์๋งํผ ์์ด์ ํฌ๊ธฐ์ ์์ด ์ ๋ ฅ
- ์์ด์ ํฌ๊ธฐ(m)๋ฅผ ์ด์ฉํด์ ์ค์๊ฐ์ ๊ฐ์๋ฅผ ๊ตฌํจ
: (m / 2 ) + 1
- ์์๊ฐ 10๊ฐ์ฉ ๋๋์ด์ ธ์ ์ ๋ ฅ๋๋ฏ๋ก [์์ด์ ํฌ๊ธฐ(m)/10 +1] ๋งํผ ๋ฐ๋ณตํด์ ์์ ์ ๋ ฅ
1) left ์ฐ์ ์์ ํ๊ฐ ๋น์ด์๋ค๋ฉด left ์ฐ์ ์์ ํ์ num ์ถ๊ฐ
2) right ์ฐ์ ์์ ํ์ ๊ฐ์ด ์์ผ๋ฉด์ ๋งจ ์์ ์๋ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ left ์ฐ์ ์์ ํ์ ๋งจ ์์ ์๋ ๊ฐ๋ณด๋ค ์์ผ๋ฉด left ์ฐ์ ์์ ํ์ num ์ถ๊ฐ
3) 2)์ ํด๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด(= right ์ฐ์ ์์ ํ์ ๋งจ ์์ ์๋ ๊ฐ๋ณด๋ค ํฌ๋ฉด) right ์ฐ์ ์์ ํ์ num ์ถ๊ฐ
4) ์ค๊ฐ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ฏ๋ก left ์ฐ์ ์์ ํ์ right ์ฐ์ ์์ ํ์ size๋ฅผ ๋ณด๊ณ size๊ฐ ๊ฐ๊ฑฐ๋ 1 ์ฐจ์ด ๋๋๋ก ์์
5) ๊ฒฐ๊ณผ ์ถ๋ ฅ
: ํ์ฌ๊น์ง ์ ์๋ฅผ ํ์๊ฐ ์ธ์ณค๋ค๋ฉด left์ right ์ฐ์ ์์ ํ ์ค์์ size๊ฐ ํฐ ์ฐ์ ์์ ํ์ ๋งจ ์์ ์๋ ๊ฐ์ ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 19640_ํ์ฅ์ค์ ๊ท์น (0) | 2023.07.20 |
---|---|
[Baekjoon] 17612_์ผํ๋ชฐ (0) | 2023.07.20 |
[Baekjoon] 1655_๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2023.07.19 |
[Baekjoon] 14235_ํฌ๋ฆฌ์ค๋ง์ค ์ ๋ฌผ (0) | 2023.07.19 |
[Baekjoon] 23757_์์ด๋ค๊ณผ ์ ๋ฌผ ์์ (0) | 2023.07.18 |