현욱은 퍼즐 게임을 좋아한다. 어느 날 친구가 간단한 플래시 퍼즐 게임을 하나 추천해 줬는데, 규칙은 다음과 같다.
-
플레이어는 1부터 n까지의 수가 한 번씩 나타나는 수열 하나를 들고 시작한다.
-
1부터 n까지의 수가 한 번씩 나타나는 또 다른 수열이 목표로 주어진다. 처음 수열을 적당히 변형해서 목표 수열과 똑같이 만들어야 한다.
-
플레이어가 수열에 쓸 수 있는 동작은 두 가지이고, 각 동작은 몇 번이든 수행할 수 있다.
- 뒤집기: 지금 수열의 순서를 거꾸로 뒤집는다. 예를 들어 1 2 3 4 5는 5 4 3 2 1이 된다.
- 밀기: 지금 수열을 왼쪽이나 오른쪽으로 한 칸 민다. 끝에서 밀려난 수는 반대쪽 끝으로 들어간다. 예를 들어 1 2 3 4 5를 오른쪽으로 한 칸 밀면 5 1 2 3 4가 된다.
규칙은 아주 쉬운데도 퍼즐이 도무지 풀리지 않아서 한참 고민하던 현욱은, 다시 비교해 보고 나서야 이 퍼즐이 주어진 동작만으로는 목표 수열을 절대 만들 수 없는 퍼즐이라는 사실을 알아차렸다.
화가 난 현욱은 퍼즐 제작자에게 따지려고, 주어진 퍼즐이 올바른 퍼즐인지 아닌지 판정하는 프로그램을 만들기로 했다. 현욱을 도와 괘씸한 제작자를 응징해 주자.