Informatica Online Judge

  222 큐브 (L) [1394 / 0572]

Time Limit(Test case) : 5000 (ms)
Number of users who solved : 26   Total Tried : 42


The Champion of this Problem (C++) : icp1481 - 0ms / 1280byte
My Best Submission (C++) : N/A

[koistudy.net (T. HS Jeon 2015)]

Background

222 큐브를 최단 회전으로 맞출 수 있는 방법을 연구하던 경곽이는 다음과 같이 222 큐브를 회전시킬 때 큐브색을 모두 맞출 수 있는 최단 회전의 횟수를 찾아내고자 하였다.





흰색 면의 왼쪽 아래에 있는 마크는 움직이지 않으면서, 6가지의 변환이 가능한데, 움직이지 않는 마크 타일의 번호를 10번이라고 하면, 큐브의 각 면의 색을 다음과 같이 입력 할 수가 있다.





경곽이는 각 회전 변환에 따른 타일 번호의 이동 관계를 찾아내 다음과 같이 저장하였다


int trans[7][24]={ //90도 회전변환 관계, trans[1][]는 1번 회전
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, //기본 상태(사용안함)
0,9,2,11,4,5,6,7,8,21,10,23,14,12,15,13,3,17,1,19,20,18,22,16, //1번 변환 결과
0,18,2,16,4,5,6,7,8,1,10,3,13,15,12,14,23,17,21,19,20,9,22,11, //2번...
2,0,3,1,8,9,6,7,12,13,10,11,16,17,14,15,4,5,18,19,20,21,22,23, //3번...
1,3,0,2,16,17,6,7,4,5,10,11,8,9,14,15,12,13,18,19,20,21,22,23, //4번...
13,15,2,3,1,5,0,7,8,9,10,11,12,23,14,22,18,16,19,17,20,21,4,6, //5번...
6,4,2,3,22,5,23,7,8,9,10,11,12,0,14,1,17,19,16,18,20,21,15,13 //6번...
};

* 코드에 복사해서 활용하기 바람!!



현재 222 큐브의 색 상태를 입력했을 때, 큐브 색을 모두 맞출 때까지 필요한 최소 회전 횟수를 출력하는 프로그램을 만들어보자.

Input

큐브의 상태를 나타내는 24개로 이루어진 문자열이 입력된다.

Output

6가지의 변환만 사용하여 원래 상태로 만드는데 드는 최소 회전 수를 출력한다.

단, 입력되는 큐브는 최대 10회전 미만으로 반드시 맞춰짐이 보장된다.

IO Example

입력예시1
oogggrgrwwwwobobyyyybbrr

출력예시1
1

입력예시2
rwgwbrbrwbwooogggyrybyoy

출력예시2
2

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]