넘치는 책장
면접 대비시간 제한1초메모리 제한128 MB
고정 폭 책장에서 책을 왼쪽에서 밀어 넣고 빼는 이벤트를 처리한 뒤, 남아 있는 책을 왼쪽부터 순서대로 출력한다.
문제
고정된 너비의 책장을 시뮬레이션한다. 시간이 지나면서 책을 책장에 넣거나 빼며, 마지막에는 책장에 남아 있는 책을 왼쪽에서 오른쪽 순서로 출력한다.
각 책은 서로 다른 양의 정수 번호 ()로 구분되며, 정수 너비를 가진다. 책장에서는 세 가지 이벤트가 처리된다.
- 넣기(Add): 새 책을 책장의 왼쪽 끝에 밀어 넣으며, 필요한 만큼 다른 책들을 오른쪽으로 민다. 책은 바로 왼쪽에 맞닿은(접촉한) 책이 밀 때에만 오른쪽으로 움직이고, 밀리지 않은 책은 그대로 있다. 책장 위에 완전히 올라가지 못한 책은 오른쪽 끝으로 떨어져 사라진다. 한 권의 책이 책장보다 넓은 경우는 없으며, 이미 책장에 있는 책을 다시 넣는 일도 없다.
- 빼기(Remove): 해당 책이 책장에 있으면 빼내고 그 자리에는 빈 공간이 남는다(다른 책들의 위치는 그대로 유지된다). 책장에 없으면 이 이벤트는 무시한다.
- 끝(End): 현재 시뮬레이션을 끝내고 책장에 남은 책을 왼쪽에서 오른쪽 순서로 출력한다.
입력
입력에는 하나 이상의 시뮬레이션이 들어 있다. 만 적힌 줄이 입력의 끝을 나타낸다.
각 시뮬레이션은 책장의 너비 ()가 적힌 줄로 시작하고, 그 뒤에 한 줄에 하나씩 이벤트가 이어진다.
- 넣기 이벤트는 대문자
A로 시작하고, 이어서 책 번호, 책의 너비 ()가 나온다. - 빼기 이벤트는 대문자
R로 시작하고, 이어서 책 번호가 나온다. - 끝 이벤트는 대문자
E하나만 있는 줄이다.
한 이벤트 안에서 각 숫자 앞에는 공백이 정확히 하나씩 있다.
출력
각 시뮬레이션마다 한 줄을 출력한다. 라벨 PROBLEM k:(여기서 는 1부터 시작하는 시뮬레이션 번호)를 먼저 출력하고, 이어서 책장에 남은 책의 번호를 왼쪽에서 오른쪽 순서로, 각 번호 앞에 공백을 하나씩 붙여 출력한다. 책장이 비어 있으면 라벨만 출력한다.