E D R , A S I H C RSS

Tower Of Cubes

원문보기
----
인기도:C(A,B,C), 성공률:높음(낮음,보통,높음), 레벨:3(1~4)

About TowerOfCubes

서로 무게가 다른 N개의 색이 칠해진 정육면체가 주어졌다. 각 정육면체의 모든 면은 서로 다른 색으로 칠해져 있다. "무거운 정육면체를 가벼운 정육면체 위에 올려놓지 않는다"라는 첫번째 조건과 "모든 정육면체의 바닥면(맨 밑에 있는 것은 제외)의 색은 그 밑에 있는 정육면체의 윗면의 색과 같아야 한다"라는 두번째 조건이 주어졌을 때, 두 조건을 만족하면서 최대한 높은 탑을 쌓아야 한다.

Input

여러 테스트 케이스가 입력될 수 있다. 각 테스트 케이스의 첫번째 줄에는 주어진 정육면체의 개수를 나타내는 정수 N(1≤N≤500)이 입력된다. 그 밑으로 N줄에 걸쳐 각 정육면체를 설명하는 내용이 입력된다. 각 정육면체를 설명하는 부분에서는 각 면의 색이 입력되는데, 각각 앞, 뒤, 왼쪽, 오른쪽, 위, 아래의 색을 나타내는 색이 순서대로 입력된다. 편의상 색은 1에서 100까지의 정수로 표현하자. 정육면체는 무게가 증가하는 순서대로 입력된다고 가정해도 좋다. 즉 첫번째 정육면체가 가장 가볍고 N번째 정육면체가 가장 무겁다고 가정할 수 있다.
N의 값으로 0이 들어오면 입력이 종료된다.

Output

우선 각 케이스마다 출력 예에 나와있는 식으로 테스트 케이스 번호를 출력한다. 그 다음 줄에는 가장 높은 탑의 정육면체 개수를 출력한다. 그 다음 줄부터는 탑을 이루는 정육면체를, 맨 위에 있는 정육면체부터 아래로 내려가면서, 한 줄에 하나씩 출력한다. 정육면체를 출력할 때는 입력된 순서를 나타내는 번호를 출력하고 스페이스를 하나 출력한 다음, 어느 방향에 있던 면이 위로 올라가도록 쌓았는지를 나타내는 문자열(front, back, left, right, top, bottom, 앞, 뒤, 왼쪽, 오른쪽, 위, 아래를 나타냄)을 출력한다. 답이 여러개 있을 수 있는데, 그 중 아무 답이나 출력해도 된다.
서로 다른 테스트 케이스 사이에는 빈 줄을 출력한다.

Sample Input

{{| 3
1 2 2 2 1 2
3 3 3 3 3 3
3 2 1 1 1 1
10
1 5 10 3 6 5
2 6 7 3 6 9
5 7 3 2 1 9
1 3 3 5 8 10
6 6 2 2 4 4
1 2 3 4 5 6
10 9 8 7 6 5
6 1 2 3 4 7
1 2 3 3 2 1
3 2 1 1 2 3
0 |}}

Sample Output

{{| Case #1
2
2 front
3 front

Case #2
8
1 bottom
2 back
3 right
4 left
6 top
8 front
9 front
10 top |}}

풀이

작성자 사용언어 개발시간 코드
조현태 C++ ??? TowerOfCubes/조현태

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1016 sec