๐ป Basic Programing/์๋ฃ๊ตฌ์กฐ
[์๋ฃ๊ตฌ์กฐ] HashSet vs Stack : ์ค๋ณต์ ๊ฑฐ
๊ณต๋ฐฑ์ค
2025. 3. 22. 19:02
728x90
๋ฐ์ํ
โ Stack vs HashSet ๋น๊ต
Stack | Hash | |
์๋ฃ๊ตฌ์กฐ ์ ํ | ์ ํ ๊ตฌ์กฐ (LIFO: ํ์ ์ ์ถ) | ์งํฉ (์์ ์์, ์ค๋ณต ํ์ฉ X) |
์ ์ฅ ์์ ์ ์ง | O (๋ค์ด๊ฐ ์์๋๋ก ์ ์ง) | X (์์๋ฅผ ๋ณด์ฅํ์ง ์์) |
์ค๋ณต ํ์ฉ ์ฌ๋ถ | O (์ค๋ณต๋ ๊ฐ ์ ์ฅ ๊ฐ๋ฅ) | X (์ค๋ณต๋ ๊ฐ ์ ์ฅ ๋ถ๊ฐ๋ฅ) |
ํ์ ์๋ | ๋๋ฆผ (๋งจ ์ ์์๋ง ๋น ๋ฅด๊ฒ ์ ๊ทผ) | ๋น ๋ฆ (O(1), ํด์ ๊ธฐ๋ฐ) |
์ฃผ์ ๋ฉ์๋ | push(), pop(), peek() | add(), remove(), contains() |
์ฌ์ฉ ์์ | DFS ํ์, ๊ดํธ ๊ฒ์ฌ, ์ฐ์๋ ์ค๋ณต ์ ๊ฑฐ ๋ฌธ์ | ์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ๊ฒ์, ์ ์ผํ ์์ ์ ์ฅ |
1. HashSet๊ณผ Stack ๊ฐ๋ ์ ๋ฆฌ
โ HashSet์ด๋?
HashSet์ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์์๋ฅผ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ, ๋น ๋ฅธ ๊ฒ์ ๋ฐ ์ถ๊ฐ, ์ญ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก HashMap์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๐ HashSet ํน์ง
- ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์์
- ๋ฐ์ดํฐ์ ์ ์ฅ ์์๊ฐ ์ ์ง๋์ง ์์
- ๋น ๋ฅธ ํ์, ์ถ๊ฐ, ์ญ์ (O(1))
- ๋ด๋ถ์ ์ผ๋ก HashMap์ ์ฌ์ฉํ์ฌ ๋์
๐ HashSet ์์ (์ค๋ณต ์ ๊ฑฐ)
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(2); // ์ค๋ณต ๊ฐ์ ๋ฌด์๋จ
System.out.println(set); // [1, 2]
}
}
โ Stack์ด๋?
Stack์ ํ์ ์ ์ถ(LIFO, Last In First Out) ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฆ, ๋ง์ง๋ง์ ์ถ๊ฐ๋ ์์๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค.
๐ Stack ํน์ง
- ํ์ ์ ์ถ(LIFO) ๊ตฌ์กฐ
- ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ์คํ์ ๋งจ ์์ ์์ (push)
- ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ์คํ์ ๋งจ ์์์๋ถํฐ ๋น ์ง (pop)
- ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ์์๋ฅผ ํ์ธ (peek)
๐ Stack ์์ (ํ์ ์ ์ถ ๋์)
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop()); // 3 (๋ง์ง๋ง์ผ๋ก ๋ค์ด๊ฐ ๊ฐ ์ ๊ฑฐ)
System.out.println(stack.peek()); // 2 (ํ์ฌ ๋งจ ์ ๊ฐ ํ์ธ)
}
}
2. HashSet vs Stack ๋น๊ต
๊ตฌ๋ถHashSetStack
๊ตฌ์กฐ | ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ ์งํฉ | ํ์ ์ ์ถ(LIFO) ๊ตฌ์กฐ |
์ค๋ณต ํ์ฉ | โ ์ค๋ณต ๋ถ๊ฐ | โ ์ค๋ณต ๊ฐ๋ฅ |
์์ ์ ์ง | โ ์์ ์์ | โ ์์ ์ ์ง |
์ฝ์ /์ญ์ ์๋ | O(1) (๋น ๋ฆ) | O(1) (๋น ๋ฆ) |
ํ์ ์๋ | O(1) (๋น ๋ฆ) | O(n) (๋๋ฆผ) |
์ฌ์ฉ ์์ | ์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ๊ฒ์ | DFS, ๊ดํธ ๊ฒ์ฌ |
3. HashSet๊ณผ Stack ์ธ์ ์ฌ์ฉํ ๊น?
- ์ค๋ณต ์ ๊ฑฐ๊ฐ ํ์ํ๊ณ ๋น ๋ฅธ ๊ฒ์์ด ์ค์ํ๋ค๋ฉด? → HashSet ์ฌ์ฉ
- ํ์ ์ ์ถ(LIFO) ๊ตฌ์กฐ๊ฐ ํ์ํ๊ณ ์์๊ฐ ์ค์ํ๋ค๋ฉด? → Stack ์ฌ์ฉ
๐ฏ ์์ ๋ฌธ์
- ์ค๋ณต๋ ์ซ์๋ฅผ ์ ๊ฑฐํ๊ณ ์ ์ผํ ์ซ์๋ง ์ ์ฅํด์ผ ํ๋ค → HashSet
- ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ซํ๋์ง ๊ฒ์ฌํด์ผ ํ๋ค → Stack
728x90