술탄의 차파티
면접 대비시간 제한1초메모리 제한128 MB
주어진 뒤집기 절차대로 스택을 아래가 가장 크도록 정렬한 뒤 뒤집은 위치들을 0과 함께 출력합니다.
문제
이스케탐볼라의 술탄은 지름이 모두 다른 차파티를 한 더미로 쌓고 특별한 방법으로 데운 것을 좋아한다. 술탄의 요리사는 아래에 놓인 차파티가 바로 위의 차파티보다 항상 지름이 큰 더미를 데워야 한다. 가장 큰 차파티가 맨 아래, 가장 작은 차파티가 맨 위에 오도록 더미를 정렬하는 방법을 출력하는 프로그램을 작성한다. 차파티의 크기는 지름으로 나타내고, 한 더미에 쌓인 차파티의 지름은 서로 다르다.
더미는 차파티 뒤집기를 여러 번 해서 정렬한다. 뒤집기는 두 차파티 사이에 뒤집개를 넣고 뒤집개에 올라간 부분 더미를 그대로 거꾸로 뒤집는 것이다. 뒤집기는 거꾸로 뒤집을 부분 더미의 맨 아래 차파티 위치로 지정하고, flip()로 쓴다. 위치는 더미 전체를 기준으로 세며 맨 아래 차파티가 위치 , 차파티가 개인 더미에서 맨 위 차파티가 위치 이다. 따라서 flip()는 위치 부터 위치 까지를 거꾸로 뒤집는다.
더미는 차파티가 쌓인 순서대로 지름을 적어서 나타낸다.
차파티 5개가 쌓인 더미에 flip(), flip(), flip()을 차례로 적용하면 다음 표처럼 변한다.
마지막 열은 아래에서 위로 8, 6, 4, 2, 1이므로 정렬이 끝났다.
입력
첫째 줄에 테스트 케이스의 수 ()가 주어진다.
각 테스트 케이스는 두 줄이다. 첫째 줄에 더미에 쌓인 차파티의 수 ()이 주어진다. 둘째 줄에 차파티 개의 지름이 맨 위 차파티부터 맨 아래 차파티까지 순서대로 공백 하나로 구분되어 주어진다. 각 지름은 이상 이하의 정수이고, 한 더미 안에서 서로 다르다.
출력
각 테스트 케이스마다 한 줄에 Case #x:를 출력하고 공백 하나를 둔 다음, 뒤집기 위치를 공백 하나로 구분해 출력한다. 는 부터 시작하는 테스트 케이스 번호다. 마지막 뒤집기 위치 다음에는 더 뒤집을 필요가 없다는 뜻으로 을 출력한다. 더미가 이미 정렬되어 있으면 만 출력한다.
한 더미를 정렬하는 뒤집기 순서는 여러 가지이므로, 다음 절차가 만드는 순서만 정답으로 인정한다. 를 부터 까지 씩 늘리면서 각 마다 아래를 수행한다.
- 위치 부터 위치 까지에서 지름이 가장 큰 차파티의 위치를 라고 한다.
- 이면 뒤집지 않고 다음 로 넘어간다.
- 이면 flip()를 하고, 이어서 flip()를 한다.
- 이면 flip()만 한다.
실제로 수행한 뒤집기를 수행한 순서대로 모두 출력하고, 마지막에 을 출력한다.