DLL을 이용하면 stack과 queue 역할을 동시에 수행하는 자료구조를 쉽게 만들 수 있다.
이 자료구조의 이름을 'QUETACK'이라고 하자.
특히, quetack은 링크드리스트를 이용하기 때문에 저장 가능한 데이터 개수의 제한이 없다는 장점이 있다.
Quetack이 stack처럼 동작하여 push 혹은 pop을 할 때는 DLL의 끝부분에서 데이터의 추가와 추출이 이루어진다.
Queue처럼 동작하는 경우, dequeue는 DLL의 head가 가리키는 앞부분, enqueue는 DLL의 끝부분에서 각각 추출과 추가가 이뤄진다.
입력은 두 개의 정수쌍들로 cmd, value로 주어지는 데
cmd = -1이면 push 이고, 이 때 value는 QUETACK에 push된다.
cmd = -2, value = -2이면 QUETACK에서 pop이 수행된다.
cmd = -3,이면 value는 QUETACK에 enqueue (DLL의 끝)된다.
cmd = -4, value = -4이면 QUETACK에서 dequeue가 수행된다.
cmd = -999, value = -999이면, QUETACK에 저장된 값들을 DLL의 head부터 마지막까지 하나씩 출력한 후 프로그램을 종료한다. 각 숫자 사이에는 한 개의 공백문자가 있고, 끝에 줄바꿈은 없다.
예를 들어, 입력으로 다음이 주어지면,
-1 1
-1 2
-3 3
-3 4
-2 -2
-4 -4
-999 -999
출력은 다음과 같다.
2 3
주의할 점은, pop 혹은 dequeue할 때 empty stack 혹은 queue를 고려하여야 한다.
-999,-999가 입력된 상황에서 QUETACK이 비어있으면, Nothing (N은 대문자, 나머지 소문자)를 출력한다. 맨 끝에 줄바꿈없음.