개의 크기가 모두 다른 원판과 개의 기둥이 있는 하노이 타워 게임을 생각해 보자. 기둥들은 , , 번으로 번호가 붙어 있다. 이 게임의 상태란 개의 원판이 임의의 기둥에 위치할 수 있는 것을 말한다. 단, 큰 원판이 작은 원판의 위에 있는 것은 허용하지 않는다. 즉, 한 기둥에 있는 원판들의 집합이 정해지면 그 순서는 저절로 정해진다.
하노이 타워의 상태 와 가 있다고 하면, 에서 로의 최단 거리 이동은 아래와 같이 정해진다.
- 처음의 상태는 이고, 모든 작업이 끝난 후의 상태는 이다.
- 한 번의 작업에서 하나의 원판만 한 기둥에서 다른 기둥으로 옮길 수 있다.
- 원판을 옮길 때 큰 원판이 작은 원판의 위로 올라가는 것은 허용되지 않는다.
- 전체 작업에서 움직이는 원판 중 가장 큰 것은 한 번만 움직일 수 있다.
모든 원판 중 가장 큰 것이 아니라 움직이는 원판 중 가장 큰 것이 한 번만 움직여야 한다는 것에 주의하라. 다른 원판들은 몇 번을 움직여도 상관이 없다.
아래 예들에는 3개의 원판이 있고, 빨간 색이 가장 큰 원판, 파란 색이 두번째 큰 원판, 녹색이 가장 작은 원판이다. 그림 1에서 보인 것 처럼, 첫 상태에서 마지막 상태로 이동하는 것은 다섯 번의 작업으로 가능하다. 하지만, 움직이는 원판 중 가장 큰 원판이 두 번 움직였으므로 이 문제에서는 허용되지 않는 방법이다.

이 문제에서 가능한 최단 거리 이동은 아래 그림과 같이 일곱 번의 작업을 사용하는 것이다.

하노이 타워의 상태 개, , , , 를 입력으로 받아 에서 로의 최단 거리 이동에 등장하는 모든 상태와, 에서 로의 최단 거리 이동에 등장하는 모든 상태 중 공통으로 등장하는 것들의 개수를 계산하는 프로그램을 작성하라. 상태들 , , , 도 공통으로 등장하면 포함해야 한다.
입력 형식
첫 줄에 원판의 개수를 나타내는 정수 이 주어진다. ()
그다음 네 개의 줄에 걸쳐 상태 , , , 를 나타내는 길이 인 문자열이 한 줄에 하나씩 주어진다. 각 문자열은 1, 2, 3으로 이루어져 있고, 문자열의 각 문자는 작은 원판부터 각 원판이 위치한 기둥의 번호를 나타낸다.
출력 형식
공통으로 등장하는 상태의 개수를 로 나눈 나머지를 출력한다.
예제 1
입력
3 112 221 131 321
출력
2
예제 2
입력
4 2113 2323 2113 2323
출력
5
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 16점
종류 2: 16점
종류 3: 12점
종류 4: 17점
종류 5: 39점
추가적인 제한 조건이 없음.
해설
먼저, 개의 원판이 모두 한 기둥에 있을 때, 이들을 모두 다른 기둥으로 옮기는 데 필요한 횟수가 회임이 알려져 있다.
, 인 경우, 문제를 다음과 같이 재귀적으로 해결할 수 있다.
- 세 기둥을 , , 라 하자.
- 상태 와 에서 다른 위치에 있는 원판 (즉, 반드시 이동해야 하는 원판) 중 가장 큰 원판을 라 하자. 를 기둥 에서 로 옮겨야 한다 가정하자.
- 보다 작은 원판을 모두 초기 상태에서 기둥 로 옮긴 뒤, 를 기둥 에서 로 옮기고, 다시 보다 작은 원판을 최종 상태로 옮겨야 한다.
- 상태 에서, 보다 작은 원판을 모두 기둥 로 옮기는 데 필요한 횟수를 구한다.
- 상태 에서, 보다 작은 원판을 모두 기둥 로 옮기는 데 필요한 횟수를 구한다.
- 구한 두 횟수에 합에 을 더한 값이 답이다.
위와 같이 재귀적으로 문제를 해결하면서 나타나는 부분문제들 중 “한 기둥에 있는 개의 원판들을 다른 기둥으로 모두 옮겨라” 형태인 것들은 앞서 언급한 바와 같이 바로 답을 구할 수 있다. 또한 이러한 형태의 부분문제들을 제외하면 개의 부분문제만이 남는다는 사실을 관찰할 수 있다. 따라서 의 시간복잡도로 해결할 수 있다.
원래 문제인 “에서 로 가는 최단경로와 에서 로 가는 최단경로 중 겹치는 상태의 개수를 구하여라”로 돌아가자. 위와 같은 방식으로 재귀적으로 문제를 해결할 때, 나타나는 부분문제들 중 “기둥 에 있는 개의 원판들을 모두 기둥 로 옮기고, 기둥 에 있는 개의 원판들을 모두 기둥 로 옮길 때, 겹치는 상태의 개수를 구하여라” (, , , 중 같은 기둥이 있을 수 있다) 형태가 아닌 부분문제는 개이다. 따라서 마찬가지로 의 시간복잡도로 문제를 해결할 수 있다.