Skip to content

Latest commit

ย 

History

History
109 lines (68 loc) ยท 2.78 KB

[Data Structure] Stack๊ณผ Queue.md

File metadata and controls

109 lines (68 loc) ยท 2.78 KB

Stack๊ณผ Queue

์Šคํƒ๊ณผ ํ๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • Stack
    • ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.
    • LIFO(Last in First Out)์˜ ๊ตฌ์กฐ.
    • ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์Šคํƒ์ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
    • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)
    • ์–ธ์ œ ์‚ฌ์šฉ? ํ•จ์ˆ˜์˜ ์ฝœ ์Šคํƒ, ๋ฌธ์ž์—ด ์—ญ์ˆœ ์ถœ๋ ฅ, ์—ฐ์‚ฐ์ž ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๋“ฑ
  • Queue
    • ๋จผ์ € ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.
    • FIFO(First in First out)์˜ ๊ตฌ์กฐ.
    • ํ๋Š” ํ™œ์šฉ ๋ถ„์•ผ๊ฐ€ ๋˜๊ฒŒ ๋งŽ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ, ๋ฃจํผ์˜ ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
    • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)
    • ์–ธ์ œ ์‚ฌ์šฉ? ๋ฒ„ํผ, ๋งˆ๊ตฌ ์ž…๋ ฅ๋œ ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ, bfs ํƒ์ƒ‰ ๋“ฑ

2๊ฐœ์˜ ์Šคํƒ์œผ๋กœ ํ ๊ตฌํ˜„

๊ฐ€๋” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฉด์ ‘์—์„œ ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

img

  1. inbox์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค(push) -> A,B
  2. inbox์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ(pop)ํ•˜์—ฌ outbox์— ์‚ฝ์ž…(push) ํ•œ๋‹ค. -> B,A
  3. outbox์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ(pop)ํ•œ๋‹ค. -> A,B ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

์ฆ‰, inbox ์Šคํƒ์— A,B ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์Šคํƒ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  inbox ์Šคํƒ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ popํ•ด์„œ outbox๋กœ ์˜ฎ๊ธด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด outbox์—๋Š” B,A ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ outbox ์Šคํƒ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ popํ•˜๊ฒŒ ๋˜๋ฉด A,B ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

[Code]

package Stack;

import java.util.Stack;

/**
 * created by victory_woo on 2020/05/06
 * Stack 2๊ฐœ๋ฅผ ์ด์šฉํ•ด์„œ Queue ๊ตฌํ˜„ํ•˜๊ธฐ.
 */
public class StackWithQueue {
    public static void main(String[] args) {
        StackQueue<String> queue = new StackQueue<>();
        queue.enQueue("A");
        queue.enQueue("B");
        queue.enQueue("C");

        System.out.println(queue.deQueue());
        System.out.println(queue.deQueue());
        System.out.println(queue.deQueue());
    }

    static class StackQueue<T> {
        private Stack<T> inBox;
        private Stack<T> outBox;

        StackQueue() {
            inBox = new Stack<>();
            outBox = new Stack<>();
        }

        void enQueue(T item) {
            inBox.push(item);
        }

        Object deQueue() {
            if (outBox.isEmpty()) {
                while (!inBox.isEmpty()) {
                    outBox.push(inBox.pop());
                }
            }

            return outBox.pop();
        }
    }
}

์œ„์˜ ๋‚ด์šฉ์€ Creator Developer ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

Stack ๊ตฌํ˜„

TODO

Queue ๊ตฌํ˜„

TODO