문제 9 · 큐 2개로 스택 구현
문제 9 [4점]
2개의 큐를 사용하여 1개의 스택을 구현하는 방법을 서술(2점)하고, 삽입(push)과 제거(remove) 연산의 성능을 서술(각 1점)하시오.
풀이 및 해설
큐는 선입선출(FIFO), 스택은 **후입선출(LIFO)**이므로, 두 개의 큐 q1, q2를 두고 순서를 뒤집는 작업으로 LIFO를 흉내 냅니다. 여기서는 삽입을 싸게(값싼 push) 하는 방식을 설명합니다.
구현 방법(2점).
push(x): 그냥q1에enqueue합니다. (원소를 계속q1뒤에 쌓아 둠)remove()(pop): 스택의 top은q1에서 가장 마지막에 들어간 원소입니다.q1에 원소가 하나 남을 때까지 앞에서 하나씩 꺼내(dequeue)q2로 옮깁니다. 그러면q1에 마지막 하나만 남고, 이것이 곧 top이므로 꺼내서 반환합니다. 그 뒤q1과q2의 역할을 맞바꿉니다(다음 연산을 위해 원소들이q1에 모여 있도록).
push: q1 <- x
pop : q1 의 마지막 1개만 남기고 나머지를 q2 로 이동
남은 1개(=top) 반환, q1 <-> q2 교환성능(각 1점).
push: 큐에 한 번 넣는 것이 전부이므로 .remove(pop): 원소 개를 옮겨야 하므로 .
반대로 push를 비싸게(넣을 때마다 뒤집기), pop을 싸게 하는 방식도 있는데, 그 경우 push가 remove가