Patience
시간 제한2초메모리 제한512 MB
5행 4열로 놓인 스무 장의 카드에서 인접한 같은 값의 짝을 골라 제거하고 남은 카드를 압축하는 과정을 반복할 때, 남는 카드 수의 최솟값을 구한다.
문제
속담에 이런 말이 있다.
"인내는 쓰지만 그 열매는 달다."
제한 시간 안에 프로그램을 작성하는 일은 여러분에게 어느 정도 인내를 요구할지도 모른다. 하지만 여러분은 그 과정을 즐기고, 대회에서 우승하기를 바란다.
"patience"라는 단어에는 인내라는 뜻이 있지만, 카드 게임에서도 다른 뜻으로 쓰인다. 혼자 하는 카드 게임은 영국에서 "patience"라고 하고 미국에서 "solitaire"라고 한다.
이 문제에서 patience를 한 판 해 보자.
이 카드 게임에서는 눈금이 1 이상 5 이하인 카드 20장만 쓴다(Ace는 보통처럼 1이다). 각 눈금마다 카드는 정확히 4장씩 있다.
처음에는 카드 20장이 5행 4열로 놓인다(그림 1 참고). 모든 카드는 앞면이 보이게 놓인다. 초기 배치의 예는 그림 2와 같다.
게임의 목적은 눈금이 같은 이웃한 카드 한 쌍을 반복해서 없애 가능한 한 많은 카드를 없애는 것이다. 이런 쌍을 짝이라고 부르자.
"이웃한 카드 한 쌍"은 서로 인접한 카드 두 장을 말한다. 예를 들어 그림 1에서 C6은 C1, C2, C3, C5, C7, C9, C10, C11 여덟 장과 인접하다. 반대로 C3은 C2, C6, C7 세 장하고만 인접하다.
짝을 없앨 때마다 남은 카드를 최대한 빽빽하게 다시 배치해야 한다. 구체적으로는 남은 카드 Ci를 아래첨자 순서대로 하나씩 살펴보면서 가장 위쪽 왼쪽 칸으로 옮긴다.
게임 진행 방법:
- 짝을 찾는다.
- 짝이 여러 개면 그중 하나를 고른다. 그림 3에서는 C6과 C9의 짝을 없애기로 했다.
- 짝을 없앤다. (그림 4 참고)
- 남은 카드를 가장 위쪽 왼쪽 칸으로 옮긴다. (그림 5, 6 참고)
- 짝을 더 이상 없앨 수 없을 때까지 위 과정을 반복한다.
카드 20장을 모두 없애면 게임에서 이기고 벌점은 0이다. 카드가 남으면 게임에서 지고 벌점은 남은 카드 수이다.
짝이 여러 개 있으면 위 과정의 2단계처럼 그중 하나를 골라야 한다. 게임 결과는 이런 선택에 따라 달라진다.
여러분의 임무는 각 초기 배치마다 최소 벌점을 구하는 프로그램을 작성하는 것이다.
입력
입력은 여러 카드 배치로 이루어진다. 입력은 다음 형식으로 주어진다.
N
Layout0
Layout1
...
LayoutN-1
N은 카드 배치의 수이다. 각 카드 배치는 게임의 초기 상태를 나타낸다. 카드 배치는 다음 형식으로 주어진다.
C0 C1 C2 C3
C4 C5 C6 C7
C8 C9 C10 C11
C12 C13 C14 C15
C16 C17 C18 C19
Ci(0 ≤ i ≤ 19)는 카드의 눈금을 나타내는 1 이상 5 이하의 정수이다.
출력
각 초기 카드 배치마다 최소 벌점을 한 줄에 하나씩 출력한다.





