오늘은 Stack 2개로 Queue를 구현해보자.
(어디서 면접 질문으로 나왔다는걸 본거 같음...)
어떻게 구현할지 생각하기 전에 아이디어를 정리하고 가자.
우리는 Stack과 Queue 포스팅에서 각각의 특징을 봤다.
Stack -> 한 번 들어간 요소들은 나올때 순서가 reverse되어 나온다.
Queue -> 한 번 들어간 요소들은 나올때 들어간 순서대로 나온다.
위의 특징에 따르면 우리는 순서가 reverse되는 자료구조를 이용해서 순서대로 나오는 자료구조를 구현하면 된다.
우리는 1, 2, 3이라고 쓰여있는 공을 순서대로 넣고 순서대로 빼고 싶다.
1, 2, 3
공을 Stack1에 넣는다면 위의 그림과 같은 상태일 것이다.3, 2, 1
로 빠져나올 것이다.3 -> 2 -> 1
순서로 공이 쌓이게 된다.1 -> 2 -> 3
순서대로 공들이 나오게 된다.(물론 이렇게 간단했다면 포스팅 안 했겠지...)
이런 경우에는 어떻게 할까?
2개의 Stack은 위와 같은 상태이고 우리는 4번 공을 넣고 싶다.
4번 공은 어떤 Stack에 넣으면 좋을까?
4 -> 1 -> 2 -> 3
과 같은 순서로 나온다.우리는 Stack1은 data를 넣는 용도로만 쓰고, Stack2는 data를 빼는 용도로만 써보자.
이상태에서 어떻게 1 -> 2 -> 3 -> 4 -> 5
순서로 공을 빼보자!
1 -> 2 -> 3
까지는 얻을 수 있다.이제 4 -> 5
를 어떻게 얻을 수 있을까?
다음과 같은 조건으로 정리할 수 있다.
오늘은 Stack 2개로 Queue를 구현하는 법을 알아봤다.
가끔 인터뷰에 나오는 문제이고 한 번 이해하면 쉬우므로 한 번 다뤄봤다.
그럼 이만👋
진짜 잘보고 갑니다 ㅠㅠ 참고합니다~