๐Ÿ“˜ TIL - LeetCode 232: Implement Queue using Stacks

์ด์Šน์šฑยท2025๋…„ 8์›” 6์ผ

์ž๋ฐ”์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
3/33

๐Ÿ” ๋ฌธ์ œ ์š”์•ฝ

  • ์Šคํƒ(Stack)๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ(Queue)์˜ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ.
  • FIFO(First-In-First-Out) ๊ตฌ์กฐ์˜ ํ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ:
    • push(x): ํ ๋’ค์— ์š”์†Œ x ์‚ฝ์ž…
    • pop(): ํ ์•ž์—์„œ ์š”์†Œ ์ œ๊ฑฐ ํ›„ ๋ฐ˜ํ™˜
    • peek(): ํ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
    • empty(): ํ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ

โœจ ํ•ต์‹ฌ ์•„์ด๋””์–ด

  • ๋‘ ๊ฐœ์˜ ์Šคํƒ ์‚ฌ์šฉ (inStack, outStack)
    • inStack: push ์—ฐ์‚ฐ์šฉ (์ž…๋ ฅ)
    • outStack: pop / peek ์—ฐ์‚ฐ์šฉ (์ถœ๋ ฅ)
  • pop ๋˜๋Š” peek ์‹œ outStack์ด ๋น„์–ด์žˆ์œผ๋ฉด inStack์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ outStack์œผ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.
    • ์ด ๊ณผ์ •์—์„œ ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋’ค์ง‘ํžˆ๋ฉฐ, FIFO ๊ตฌํ˜„ ๊ฐ€๋Šฅ

๐Ÿง  ๋ฐฐ์šด ์ 

  • ์Šคํƒ ๋‘ ๊ฐœ๋กœ ํ์˜ FIFO๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ํฅ๋ฏธ๋กœ์› ๋‹ค.
  • shiftStacks() ํ•จ์ˆ˜๋กœ ํ•„์š”ํ•  ๋•Œ๋งŒ ์˜ฎ๊น€์œผ๋กœ์จ ์‹œ๊ฐ„ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ ์—ฐ์‚ฐ์ด Amortized O(1) ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

โฑ๏ธ ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„

์—ฐ์‚ฐ์‹œ๊ฐ„ ๋ณต์žก๋„์„ค๋ช…
pushO(1)inStack์— push๋งŒ ํ•จ
pop/peekํ‰๊ท  O(1), ์ตœ์•… O(n)outStack์ด ๋น„์–ด์žˆ์„ ๋•Œ๋งŒ ์ด๋™
emptyO(1)๋‘ ์Šคํƒ์ด ๋ชจ๋‘ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
  • ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) โ†’ ์ตœ๋Œ€ n๊ฐœ์˜ ์š”์†Œ๋ฅผ ์Šคํƒ ๋‘ ๊ฐœ์— ์ €์žฅ

๐Ÿ’ป ํ•ต์‹ฌ ์ฝ”๋“œ ์ •๋ฆฌ (Java)

class MyQueue {
    private Stack<Integer> inStack = new Stack<>();
    private Stack<Integer> outStack = new Stack<>();

    public void push(int x) {
        inStack.push(x);
    }

    public int pop() {
        shiftStacks();
        return outStack.pop();
    }

    public int peek() {
        shiftStacks();
        return outStack.peek();
    }

    public boolean empty() {
        return inStack.isEmpty() && outStack.isEmpty();
    }

    private void shiftStacks() {
        if (outStack.isEmpty()) {
            while (!inStack.isEmpty()) {
                outStack.push(inStack.pop());
            }
        }
    }
}

๐ŸŽฏ ๋А๋‚€ ์ 

  • ๋‹จ์ˆœํ•œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์—ฌ๋„ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์„ฑ์„ ๊นŠ์ด ์ดํ•ดํ•ด์•ผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋А๊ผˆ๋‹ค.
  • push๋Š” ๋ฌด์กฐ๊ฑด inStack, pop/peek๋Š” ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—๋งŒ in โ†’ out ์ „์†ก ์ „๋žต์„ ์ตํ˜”๋‹ค.
  • ํ์™€ ์Šคํƒ์˜ ์ฐจ์ด์ , ์ „ํ™˜ ๊ธฐ๋ฒ•์„ ๋‹ค์‹œ ๋ณต์Šตํ•˜๋Š” ์ข‹์€ ๋ฌธ์ œ์˜€๋‹ค.
profile
์•„๋Š”๊ฑฐ ์—†๋Š” ์ „๊ณต์ž

0๊ฐœ์˜ ๋Œ“๊ธ€