팀 큐
면접 대비시간 제한1초메모리 제한128 MB
새 원소가 같은 팀 원소 바로 뒤에 들어가고 없으면 맨 뒤에 붙는 팀 큐를 시뮬레이션하며, DEQUEUE마다 꺼낸 원소를 출력한다.
문제
큐(Queue)와 우선순위 큐(Priority Queue)는 대부분의 컴퓨터 과학자에게 익숙한 자료구조입니다. 하지만 팀 큐(Team Queue)는 일상에서 자주 볼 수 있음에도 상대적으로 덜 알려져 있습니다. 예를 들어 점심시간에 학생 식당 앞에 늘어선 줄이 바로 팀 큐입니다.
팀 큐에서는 각 원소가 하나의 팀에 속합니다. 새 원소가 큐에 들어올 때, 먼저 큐의 앞에서 뒤로 훑어보며 같은 팀의 원소(팀원)가 이미 큐에 있는지 확인합니다. 팀원이 있다면 그 팀원들의 바로 뒤에 들어갑니다. 팀원이 없다면 큐의 맨 뒤로 들어가 새로운 마지막 원소가 됩니다. 원소를 꺼내는 것(dequeue)은 일반 큐와 같아서, 팀 큐에 놓인 순서대로 앞에서부터 처리합니다.
이러한 팀 큐를 시뮬레이션하는 프로그램을 작성하세요.
입력
입력은 하나 이상의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 팀의 수 ()로 시작합니다. 이어서 개의 팀 설명이 주어지며, 각 팀 설명은 그 팀에 속한 원소의 개수와 그 원소들로 이루어집니다. 원소는 이상 이하의 정수이고, 한 팀은 최대 개의 원소를 가질 수 있습니다.
그 다음에는 명령 목록이 이어집니다. 명령은 세 가지입니다.
ENQUEUE x— 원소 를 팀 큐에 넣습니다.DEQUEUE— 맨 앞의 원소를 처리하여 큐에서 제거합니다.STOP— 테스트 케이스의 끝을 나타냅니다.
의 값이 이면 입력이 끝납니다.
주의: 한 테스트 케이스에는 최대 200000개의 명령이 포함될 수 있으므로, 넣기와 꺼내기가 모두 상수 시간에 이루어지도록 효율적으로 구현해야 합니다.
출력
각 테스트 케이스마다 먼저 Scenario #k 형식의 줄을 출력합니다. 여기서 는 테스트 케이스의 번호이며 부터 시작합니다. 그런 다음 각 DEQUEUE 명령에 대해 꺼낸 원소를 한 줄에 하나씩 출력합니다. 서로 다른 테스트 케이스의 출력 사이에는 빈 줄 하나를 넣어 구분합니다.