About StacksOfFlapjacks ¶
그릴에서 팬 케이크를 구워서 완벽한 팬 케이크 스택을 만드는 것은 정말 까다로운 일이다. 아무리 팬 케이크를 정성스럽게 만들어도 팬 케이크의 크기가 조금씩 다르기 때문이다. 하지만 팬 케이크를 잘 정렬해서 위에 있는 팬 케이크가 아래에 있는 팬 케이크보다 더 작게 쌓으면 깔끔하게 보이게 할 수 있다. 팬 케이크의 크기는 그 지름으로 주어진다.
스택을 정렬하는 과정은 일련의 팬 케이크 뒤집기 작업을 통해 이루어진다. 한 번 뒤집는 작업은 스택에 쌓여있는 것 중 두 팬 케이크 사이에 주걱을 집어넣고 그 주걱 위에 있는 모든 팬 케이크를 뒤집는 작업(주걱 위에 있는 팬 케이크로 구성된 하위 스택의 순서가 거꾸로 되도록 만드는 작업)으로 구성된다. 한 번의 뒤집기 작업은 전체 스택을 기준으로 뒤집어질 하위 스택의 맨 아래에 있는 팬 케이크의 위치를 지정하는 방식으로 표시된다. n개의 팬 케이크로 구성된 스택이 있을 때 맨 밑에 있는 팬 케이크의 위치는 1, 맨 위에 있는 팬 케이크의 위치는 n으로 표시된다.
스택은 팬 케이크가 등장하는 순서대로 스택에 들어있는 각 팬 케이크의 지름을 알려주는 식으로 열거된다. 예를 들어 다음은 세 개의 팬 케이크 스택을 열거해놓은 것인데, 왼쪽 스택 맨 위에 있는 팬 케이크는 지름이 8임을 알 수 있다.
스택을 정렬하는 과정은 일련의 팬 케이크 뒤집기 작업을 통해 이루어진다. 한 번 뒤집는 작업은 스택에 쌓여있는 것 중 두 팬 케이크 사이에 주걱을 집어넣고 그 주걱 위에 있는 모든 팬 케이크를 뒤집는 작업(주걱 위에 있는 팬 케이크로 구성된 하위 스택의 순서가 거꾸로 되도록 만드는 작업)으로 구성된다. 한 번의 뒤집기 작업은 전체 스택을 기준으로 뒤집어질 하위 스택의 맨 아래에 있는 팬 케이크의 위치를 지정하는 방식으로 표시된다. n개의 팬 케이크로 구성된 스택이 있을 때 맨 밑에 있는 팬 케이크의 위치는 1, 맨 위에 있는 팬 케이크의 위치는 n으로 표시된다.
스택은 팬 케이크가 등장하는 순서대로 스택에 들어있는 각 팬 케이크의 지름을 알려주는 식으로 열거된다. 예를 들어 다음은 세 개의 팬 케이크 스택을 열거해놓은 것인데, 왼쪽 스택 맨 위에 있는 팬 케이크는 지름이 8임을 알 수 있다.
8 7 2
4 6 5
6 4 8
7 8 4
5 5 6
2 2 7
filp(3)을 통해 왼쪽 스택이 가운데 스택으로 바뀔 수 있다. 그리고 flip(1)이라는 명령을 쓰면 가운데 스택이 오른쪽 스택으로 바뀐다.
4 6 5
6 4 8
7 8 4
5 5 6
2 2 7
Input ¶
입력은 여러 개의 팬 케이크 스택으로 구성된다. 각 스택은 한 개에서 서른 개 사이의 팬 케이크로 구성되며 각 팬 케이크의 지름은 1 이상 100이하의 정수로 주어진다. 입력은 파일 끝 문자에 의해 종료된다. 각 스택은 한 줄에 입력되며 맨 위에 있는 팬 케이크가 맨 앞에, 맨 밑에 있는 팬 케이크가 맨 뒤에 입력되고 모든 팬 케이크는 스페이스에 의해 구분된다.
Output ¶
각 팬 케이크 스택에 대해 원래 스택을 한 줄로 출력해야 하며 다음 줄에는 가장 큰 팬 케이크가 맨 밑으로, 가장 작은 팬 케이크가 맨 위로 올라가도록(팬 케이크가 클수록 밑으로 가도록) 스택을 정렬하기 위해 필요한 뒤집기 순서를 출력해야 한다. 뒤집기 수선를 출력한 후 맨 뒤에는 더 이상 뒤집지 않아도 된다는 것을 나타내는 0을 출력해야 한다. 스택 정렬이 끝나면 더 이상 뒤집지 않는다.
풀이 ¶
작성자 | 사용언어 | 개발시간 | 코드 |
이동현 | C++ | 2시간 | StacksOfFlapjacks/이동현 |
문보창 | C++ | 30분 | StacksOfFlapjacks/문보창 |
조현태 | C | . | StacksOfFlapjacks/조현태 |