Tags
- ๊ตฌํ
- SpringBoot
- ์๋ฎฌ๋ ์ด์
- queue
- Brute Force Algorithm
- ๊ต์ฌ
- ๊น์ด ์ฐ์ ํ์
- LV2
- ์ ๋ ฌ
- Python
- greedy
- PGM
- Dynamic Programming
- ๊ทธ๋ํ ์ด๋ก
- ๊ทธ๋ํ ํ์
- ์๋ฃ๊ตฌ์กฐ
- ์ํ
- CodingTest
- BOJ
- dfs
- ์ ์๋ก
- ๋ฐฑํธ๋ํน
- BFS
- Study
- sort
- ๋ฌธ์์ด
- Java
- ๋๋น ์ฐ์ ํ์
- DP
- stack
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_7662 : ์ด์ค ์ฐ์ ์์ ํ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- int ๋ฒ์์ ๊ฐ์ ๋ฃ๋ 'I' ์ฐ์ฐ๊ณผ ์ต๋๊ฐ ํน์ ์ต์๊ฐ์ ๋นผ๋ 'D'์ฐ์ฐ์ด k๋ฒ ์ํ๋๋ค.
- ์ต์ข ์ฐ์ฐ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
- k์ ์ต๋๊ฐ์ด 1,000,000 ์ด๋ฏ๋ก ๊ฐ์ ์ ์ฅํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ ํํ๋ก ๊ตฌํํด์ผ ํ๋ค.
- ํ์ ๋ ฌ์ด ์ ์ฉ๋, ์ฐ์ ์์ ํ(Priority Queue) ํน์ TreeMap์ ์ฌ์ฉํ๋ค.
๐ธ Priority Queue ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
// TestCase
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
// Input
int k = Integer.parseInt(br.readLine());
Queue<Integer> max_pq = new PriorityQueue<>(k, Collections.reverseOrder());
Queue<Integer> min_pq = new PriorityQueue<>(k);
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
char order = st.nextToken().charAt(0);
int num = Integer.parseInt(st.nextToken());
// Orders
if (order == 'I') { // Inque
max_pq.add(num);
min_pq.add(num);
map.put(num, map.getOrDefault(num, 0) + 1);
} else { // Deque
if (num == 1) { // max_pq deque
deque(max_pq, map);
} else { // min_pq deque
deque(min_pq, map);
}
}
}
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
boolean flag = true;
for (int key : map.keySet()) {
int num = map.get(key);
if (num > 0) {
flag = false;
max = Math.max(max, key);
min = Math.min(min, key);
}
}
if (flag) {
sb.append("EMPTY").append('\n');
} else {
sb.append(max).append(' ').append(min).append('\n');
}
}
System.out.print(sb);
}
private static void deque(Queue<Integer> queue, Map<Integer, Integer> map) {
while (!queue.isEmpty()) {
int num = queue.poll();
if (map.get(num) > 0) {
map.put(num, map.get(num) - 1);
break;
}
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ฐ์ ์์ ํ๋ฅผ 2๊ฐ ๋ง๋ค์ด ๊ฐ๊ฐ ์ต๋ํ๊ณผ ์ต์ํ์ผ๋ก ์ ๋ ฌ์กฐ๊ฑด์ ์ง์ ํด ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ๊ตฌํ ์ ์๋๋ก ํ๋ค.
- ํ์ฌ ์ ํจํ ์์๋ฅผ ์ถ์ ํ๊ธฐ ์ํด map์ผ๋ก ๊ณตํต ์์๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์ฐ์ ์์ ํ์์ pollํ ๊ฐ์ด map์ ์๋ ์์๋ผ๋ฉด, ์ ํจํ๋ฏ๋ก D์ฐ์ฐ์ด ์ํ ๋ ๊ฒ์ด๋ค.
- ์ฐ์ ์์ ํ์์ pollํ ๊ฐ์ด map์ ์๋ ์์๋ผ๋ฉด, ์ ํจํ์ง ์์ผ๋ฏ๋ก ๋ค์ ํ ๋ฒ pollํ๋ค.
๐ธ Priority Queue ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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();
StringTokenizer st = null;
// TestCase
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
// Input
int k = Integer.parseInt(br.readLine());
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
int max, min;
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
char order = st.nextToken().charAt(0);
int num = Integer.parseInt(st.nextToken());
// Orders
if (order == 'I') { // Inque
treeMap.put(num, treeMap.getOrDefault(num,0)+1);
} else { // Deque
if (treeMap.isEmpty()) continue;
if (num == 1) { // max deque
max = treeMap.lastEntry().getValue();
if (max == 1) {
treeMap.remove(treeMap.lastKey());
} else {
treeMap.put(treeMap.lastKey(), max-1);
}
} else { // min deque
min = treeMap.firstEntry().getValue();
if (min == 1) {
treeMap.remove(treeMap.firstKey());
} else {
treeMap.put(treeMap.firstKey(), min-1);
}
}
}
}
if (treeMap.isEmpty()) {
sb.append("EMPTY").append('\n');
} else {
sb.append(treeMap.lastKey()).append(' ').append(treeMap.firstKey()).append('\n');
}
}
System.out.print(sb);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- TreeMap์ ๋ง๋ค์ด ์์๋ฅผ ์ ์ฅํ๋ค.
- java์ TreeMap์ Red-Black Tree๋ก, ์ผ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ์์ ๊ฐ, ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฐ์ ํํ๋ฅผ ์ ์งํ๋ค.
- key๋ฅผ ์๋์ผ๋ก ์ ๋ ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ 'I'์ฐ์ฐ์ผ๋ก ๋ฃ๋ ๊ฐ์ ํค๋ก ๋ฃ๊ณ , ๊ทธ ๋์ ๊ฐ์ value๋ก ์ ์ฅํ๋ค. (์ค๋ณต๋ ๊ฐ๋ 'I' ์ฐ์ฐ์ผ๋ก ๋ค์ด์ค๊ธฐ ๋๋ฌธ)
- firstKey๋ก ์ต์๊ฐ, lastKey๋ก ์ต๋๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
๐ธ end ๐ธ
- ์ด์ค ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง ์์์ ๊ณ ๋ฏผํ๋ค ํ์ด๋ฅผ ์ฐพ์๋ณด์๋ค.
- ์ฒ์ ํ์ด๋ ์ฐ์ ์์ ํ 2๊ฐ์ ๋งต 1๊ฐ๋ฅผ ์ด์ฉํ ํ์ด์๋ค.
- ์ต๋ํ๊ณผ ์ต์ํ์ ์ด๋ป๊ฒ ํจ๊ป ๊ตฌํํ ๊น ๊ณ ๋ฏผํ๋๋ฐ ์ด ํ์ด๊ฐ ๋ฑ์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ์ข๋ ๊ฐ๊ฒฐํ ํ์ด๊ฐ ์์๊น ํ๋๋ฐ TreeMap ํ์ด๊ฐ ๋ ์ ์์ ์ธ ๊ฒ ๊ฐ๋ค.
- ์ฝ๋๋ ์งง์์ง๊ณ ์๊ฐ๋ณต์ก๋๋ ๋ฎ์์ก๋ค.
- ์ฒ์ ํ์ด๋ ์ฐ์ ์์ ํ 2๊ฐ์ ๋งต 1๊ฐ๋ฅผ ์ด์ฉํ ํ์ด์๋ค.
- ๋ฌธ์ ๋ถ์๊ณผ ํ์ด ๊ณํ์ ์ ์ผ๋ฉฐ ํ์ดํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1010 : ๋ค๋ฆฌ ๋๊ธฐ (0) | 2023.04.06 |
---|---|
BOJ_1463 : 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.03.30 |
BOJ_5430 : AC (0) | 2023.03.28 |
BOJ_9019 : DSLR (0) | 2023.03.21 |
BOJ_14502 : ์ฐ๊ตฌ์ (0) | 2023.03.08 |