๐Ÿ’ป 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 ์‚ฌ์šฉ

๐ŸŽฏ ์˜ˆ์ œ ๋ฌธ์ œ

  1. ์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์œ ์ผํ•œ ์ˆซ์ž๋งŒ ์ €์žฅํ•ด์•ผ ํ•œ๋‹คHashSet
  2. ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ซํ˜”๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹คStack

 

 

 

728x90