https://www.acmicpc.net/problem/7785
๋ฌธ์
- ๊ธฐ๋ก๋ ์ถ์ ๊ธฐ๋ก์ ์ n์ด ์ฃผ์ด์ง๋ค. (2 ≤ n ≤ 10^6)
- ๊ฐ ์ฌ๋์ ์ด๋ฆ์ด ์ฃผ์ด์ง๊ณ "enter"์ธ ๊ฒฝ์ฐ๋ ์ถ๊ทผ, "leave"์ธ ๊ฒฝ์ฐ๋ ํด๊ทผ
- ํ์ฌ์๋ ๋๋ช ์ด์ธ์ด ์์ผ๋ฉฐ, ๋์๋ฌธ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ด๋ฆ
- ํ์ฌ ํ์ฌ์ ์๋ ์ฌ๋์ ์ด๋ฆ์ ์ฌ์ ์์ ์ญ์์ผ๋ก ํ ์ค์ ํ ๋ช ์ฉ ์ถ๋ ฅ
ํ์ด
์ค๋ฒ4 ๋ฌธ์ ๋ก ๋ง ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ์์ํ 2๋ ์ ์ ์ด ๋ฌธ์ ๋ฅผ ํ์๋ค๊ฐ ์๊ฐ ์ด๊ณผ๋ก ํ๋ ธ์๋ค. 2๋ ์ด ์ง๋ ์ง๊ธ ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ดค๋๋ฐ, ์๊ฐ ์ด๊ณผ๊ฐ ๋ ์ด์ ๋ฅผ ๋ฐ๋ก ์ฐพ์ ๊ธ๋ฐฉ ํด๊ฒฐํ ์ ์์๋ค. (2๋ ์ฌ์ด์ ์ค๋ ฅ์ด ๋์์์ ์ค๊ฐํ๊ฒ ๋์๋ค!)
๋ฌธ์ ์ ์ฃผ์ด์ง๋๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. ์๋ฃ๊ตฌ์กฐ์ enter์ธ ๊ฒฝ์ฐ์๋ ์ฝ์ ํ๊ณ , leave์ธ ๊ฒฝ์ฐ์๋ ์ ๊ฑฐํ๊ณ
2. ์ญ์์ผ๋ก ์ ๋ ฌํ์ฌ
3. ์ ๋ ฌ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ํํ๋ฉฐ ํ ๋ช ์ฉ ์ถ๋ ฅ
๋ณดํต ๋ค์ด์จ ์์๋๋ก ์ฝ์ ํ๊ณ , ์ค๊ฐ์์ ์ ๊ฑฐ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ฉด List๋ฅผ ๋ ์ฌ๋ฆฐ๋ค. ๊ทธ๋์ 2๋ ์ ์ ๋๋ ArrayList๋ก ๊ตฌํํ์ง๋ง ์๊ฐ์ด๊ณผ๋ฅผ ๋ง๊ฒ ๋์๋ค. ๋น์์๋ ์๋ฃ๊ตฌ์กฐ ๋ณ ์ํ์๊ฐ์ ๋ํด ์ ๋ชจ๋ฅผ ๋๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ง์ ๊ฒ ๊ฐ์๋ฐ, ์ ํ๋ฆฐ ๊ฑด์ง ๋ชฐ๋๋ค.
- ํฐ ์ ๋ ฅ๊ฐ : (2 ≤ n ≤ 10^6)
์ถ์ ๊ธฐ๋ก์ ์๊ฐ ์ต๋ 10์ 6์น = ๋ฐฑ๋ง์ด๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ ๋, O(n^2)์ด์์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๊ฒ ๋๋ค. n๊ฐ์ ์ถ์ ๊ธฐ๋ก์ ์ํํ๋ฉด์ ์ฝ์ ๊ณผ ์ ๊ฑฐ๋ฅผ ํ๋ ๋ฐ n๋ฏธ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ค์ผ ํ๋ค. ์๋ฃ๊ตฌ์กฐ ๋ณ ์ฝ์ ๊ณผ ์ ๊ฑฐ ์ฐ์ฐ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋ค๋ฅด๋ฏ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค!
- ์๋ฃ๊ตฌ์กฐ ๋ณ ์ํ ์๊ฐ : ArrayList VS HashSet
ArrayList๋ ์ฝ์ ์ O(1), ์ค๊ฐ ์์ ์ ๊ฑฐ์ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฌธ์ ์์ ์ฝ์ ์ฐ์ฐ์ ๊ด์ฐฎ์๋ฐ, ์ ๊ฑฐ ์ฐ์ฐ์ด O(n)์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ์ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์๋ฃ๊ตฌ์กฐ ์ค, ์ค๊ฐ์์ ์ ๊ฑฐํ๋ ์ฐ์ฐ์์ O(1)๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐพ์์ผ ํ๋ค. ์๊ฐ๋๋ ์๋ฃ๊ตฌ์กฐ๋ HashMap, HashSet, Queue, Stack (์์์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง ์ค๊ฐ์์ ์ญ์ ํ ์ ์๋ค) ์ด๋ค.
HashMap, HashSet ์ค ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์จ์ผํ ๊น? ๋ฌธ์ ๋ฅผ ์์ธํ ์ฝ์ด๋ณด๋ฉด, 'ํ์ฌ์๋ ๋๋ช ์ด์ธ์ด ์๋ค'๊ฐ ์๋ค. ์ฆ, ์ค๋ณต์ ํ๋ฝํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๋ ์ค ์ค๋ณต์ ํ๋ฝํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ฉด HashSet์ด๋ค. HashMap์ key์ value๋ก ๊ตฌ์ฑ์ด ๋๊ณ , key ๊ฐ๋ง ๊ฒน์น์ง ์๋๋ค๋ฉด value๋ ์ค๋ณต๋ ์ ์๋ค.
HashSet์ ์ฝ์ ์ O(1), ์ ๊ฑฐ์ O(1)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ์๊ฐ ์ด๊ณผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- HashSet ์ ๋ ฌ
HashSet ์ ๋ ฌ์ ์ํด์๋ ArrayList๋ก ๋ณํํ ๋ค์์ ArrayList๋ฅผ ์ ๋ ฌํด์ผ ํ๋ค.
์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
HashSet<String> set = new HashSet<>();
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String name = st.nextToken();
String statement = st.nextToken();
if(statement.equals("enter")) {
set.add(name);
} else {
set.remove(name);
}
}
//์ ๋ ฌ
List<String> list = new ArrayList<String>(set);
Collections.sort(list, Collections.reverseOrder());
//์ถ๋ ฅ
StringBuilder sb = new StringBuilder();
for(String str : list) {
sb.append(str + "\n");
}
System.out.println(sb);
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
- HashSet
- ์ํ์๊ฐ : ์ฝ์ O(1), ์ ๊ฑฐO(1)
- ์ ๋ ฌ : List<String> list = new ArrayList<String>(set);
- ๋ฆฌ์คํธ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ : Collections.sort(list, Collections.reverseOrder());
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 16234๋ฒ : ์ธ๊ตฌ ์ด๋ (0) | 2023.09.25 |
---|---|
๋ฐฑ์ค 1261๋ฒ : ์๊ณ ์คํ (0) | 2023.09.16 |
๋ฐฑ์ค 14442๋ฒ : ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ2 (0) | 2023.08.30 |
๋ฐฑ์ค 2206๋ฒ : ๋ฒฝ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2023.08.30 |
๋ฐฑ์ค 16724๋ฒ : ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (1) | 2023.08.29 |