https://www.acmicpc.net/problem/31792
๋ฌธ์
ํ์ด
์ฝ์ /์ญ์ /ํ์ ๋ชจ๋ ์๊ฐ ๋ณต์ก๋ O(logN)์ ๊ฐ๋ฅํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์๋ค.
์ง์ 3 (ํ์) ๊ฐ์ ๊ฒฝ์ฐ ๊ทธ๋ฆฌ๋ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ฐ, ๊ทธ๋ฅ ๊ฐ๊ฒฉ์ด ๋ฎ์ ์ฑ ๋ถํฐ ์ง์ดํ๋ค๊ฐ ์๋ก์ด ํ์ด์ง๊ฐ ํ์ํ๋ฉด ์ถ๊ฐํ๋ฉด ๋๋ค. ๋ฌผ๋ก ํ๋ํ๋์ฉ ํ์ํ๋ฉด O(N)์ด ๋๋ฏ๋ก S = S * 2 ๊ฐ์ ์์ผ๋ก ํ์ํ๊ธฐ. (TreeMap.higerKey(Key k) ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ์ฌ์)
์ฝ๋
๋๋ณด๊ธฐ
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int Q = Integer.parseInt(br.readLine());
TreeMap<Integer, Integer> map = new TreeMap<>();
while (Q-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
int cmd, S;
cmd = Integer.parseInt(st.nextToken());
switch (cmd) {
case 1:
S = Integer.parseInt(st.nextToken());
map.put(S, map.getOrDefault(S, 0) + 1);
break;
case 2:
S = Integer.parseInt(st.nextToken());
if (map.containsKey(S)) {
map.put(S, map.get(S) - 1);
if (map.get(S) == 0) {
map.remove(S);
}
}
break;
case 3:
int pageCnt = 0;
if (map.size() > 0) {
Integer curS = map.firstKey();
pageCnt++;
while ((curS = map.higherKey(curS * 2 - 1)) != null) {
pageCnt++;
}
}
sb.append(pageCnt).append('\n');
break;
}
}
System.out.println(sb);
br.close();
}
}
'Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฑ์ค 31804 - Chance! (0) | 2024.05.11 |
---|---|
[Java] ๋ฐฑ์ค 2411 - ์์ดํ ๋จน๊ธฐ (0) | 2024.04.12 |
[Java] ๋ฐฑ์ค 31716 - ํ๋๋ชจ๋น์ค ์์จ ์ฃผํ ํ ์คํ 1 (0) | 2024.04.10 |
[Java] ๋ฐฑ์ค 1707 - ์ด๋ถ ๊ทธ๋ํ (0) | 2024.04.09 |
[Java] ๋ฐฑ์ค 16724 - ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (0) | 2024.03.28 |