넘치는 책장

면접 대비

시간 제한1초메모리 제한128 MB

요약
고정 폭 책장에서 책을 왼쪽에서 밀어 넣고 빼는 이벤트를 처리한 뒤, 남아 있는 책을 왼쪽부터 순서대로 출력한다.
난이도

보통10점 중 5점

유형
시뮬레이션, 구현, 배열, 연결 리스트
정답자
아직 제출이 없습니다

문제

고정된 너비의 책장을 시뮬레이션한다. 시간이 지나면서 책을 책장에 넣거나 빼며, 마지막에는 책장에 남아 있는 책을 왼쪽에서 오른쪽 순서로 출력한다.

각 책은 서로 다른 양의 정수 번호 II(0<I≤1000 < I \le 100)로 구분되며, 정수 너비를 가진다. 책장에서는 세 가지 이벤트가 처리된다.

  • 넣기(Add): 새 책을 책장의 왼쪽 끝에 밀어 넣으며, 필요한 만큼 다른 책들을 오른쪽으로 민다. 책은 바로 왼쪽에 맞닿은(접촉한) 책이 밀 때에만 오른쪽으로 움직이고, 밀리지 않은 책은 그대로 있다. 책장 위에 완전히 올라가지 못한 책은 오른쪽 끝으로 떨어져 사라진다. 한 권의 책이 책장보다 넓은 경우는 없으며, 이미 책장에 있는 책을 다시 넣는 일도 없다.
  • 빼기(Remove): 해당 책이 책장에 있으면 빼내고 그 자리에는 빈 공간이 남는다(다른 책들의 위치는 그대로 유지된다). 책장에 없으면 이 이벤트는 무시한다.
  • 끝(End): 현재 시뮬레이션을 끝내고 책장에 남은 책을 왼쪽에서 오른쪽 순서로 출력한다.

입력

입력에는 하나 이상의 시뮬레이션이 들어 있다. −1-1 만 적힌 줄이 입력의 끝을 나타낸다.

각 시뮬레이션은 책장의 너비 ss(5≤s≤1005 \le s \le 100)가 적힌 줄로 시작하고, 그 뒤에 한 줄에 하나씩 이벤트가 이어진다.

  • 넣기 이벤트는 대문자 A로 시작하고, 이어서 책 번호, 책의 너비 ww(0<w≤s0 < w \le s)가 나온다.
  • 빼기 이벤트는 대문자 R로 시작하고, 이어서 책 번호가 나온다.
  • 끝 이벤트는 대문자 E 하나만 있는 줄이다.

한 이벤트 안에서 각 숫자 앞에는 공백이 정확히 하나씩 있다.

출력

각 시뮬레이션마다 한 줄을 출력한다. 라벨 PROBLEM k:(여기서 kk는 1부터 시작하는 시뮬레이션 번호)를 먼저 출력하고, 이어서 책장에 남은 책의 번호를 왼쪽에서 오른쪽 순서로, 각 번호 앞에 공백을 하나씩 붙여 출력한다. 책장이 비어 있으면 라벨만 출력한다.

예제1

  1. 예제 1

    입력
    10
    R 3
    A 6 5
    A 42 3
    A 3 5
    A 16 2
    A 15 1
    R 16
    E
    7
    A 49 6
    A 48 2
    R 48
    E
    5
    A 1 1
    A 2 1
    A 3 1
    R 2
    A 4 1
    A 5 1
    R 5
    R 4
    A 6 1
    A 7 4
    E
    -1
    
    예상 출력
    PROBLEM 1: 15 3
    PROBLEM 2:
    PROBLEM 3: 7 6