문제
Albert는 혼자서도 할 수 있는 보드 게임을 즐겨한다. 이 게임을 플레이 하기 위해 우선 행 열 크기의 격자 보드 게임판을 준비한 후 임의의 칸에 벽을 설치한다. 이후, 개의 서로 다른 빈칸에 (즉, 벽이 없는 칸) 게임말을 하나씩 놓고, 마지막으로 남아있는 빈칸 중 한 곳을 골라 각 게임말이 도달해야하는 목적지를 정한다 - 목적지 칸의 위치를 라 하자 (행 열). 편의상 게임말에는 1번부터 번까지 번호가 붙어있다고 하고, 번째 말이 놓인 칸을 라 하자.
예를 들어 아래 그림의 좌측은 인 게임 보드판의 모습을 나타내고 'W' 로 표시된 칸은 벽을 나타낸다. 나머지 '.' 로 표시된 칸은 빈칸을 나타낸다. 편의상 이 문제에서 문자열 는 번째 행의 게임 보드판의 모습을 나타내는 길이가 인 문자열이라 하면, 이 예제의 게임 보드판은 ".WW.", "..W.", ".WW.", "...." 로 나타낼 수 있다. 우측 그림은 이후 Albert가 총 3개의 게임말을 놓은 칸과 목적지 칸을 나타내는데, , ], 그리고 이다.
이 때 각 말이 목적지에 도달하려면 벽이 없는 빈칸을 통해 상/하/좌/우로 이동할 수 있는데, 번째 말이 목적지까지 이동해야하는 최소 거리를 라 하자. 위 예제에서 (하 -> 우 로 이동하면 된다), , 그리고 임을 쉽게 알 수 있다. 모든 말이 이동해야하는 최소 거리의 총 합을 라 하고, 이는 게임의 점수가 된다 - 이 예제의 게임 점수는 점이다.
이 놀이가 너무 심심하다고 느낀 Albet는 게임을 약간 변형해보기로 했다. 우선, 맨 처음의 보드 게임 상태를 유지한채로 벽을 하나 없애보기로 했다. 벽을 없애면 새로운 길이 생길 수 있으므로 게임의 점수는 같거나 낮아질텐데, 이 점수의 차이를 없어진 "벽의 가치"라 정의하자. 위 예제에서는 벽이 총 5칸 있으므로, 아래 그림 처럼 5가지 다른 방법으로 벽을 딱 하나 없앨 수 있다 - 벽이 없어진 칸은 알아보기 쉽도록 그림에서 'X'로 표시했지만 빈칸이므로 게임말이 지나갈 수 있다.
위 다섯가지의 새로운 게임 보드에서 점수를 구한 후 기존 게임의 점수 (앞서 구한 17점) 과의 차이를 구하면 없앤 벽의 가치가 된다. 왼쪽 부터 순서대로 이를 구해보면:
- 가장 좌측 게임의 점수는 17점으로 기존 게임의 점수와 동일하므로 (1, 2) 칸에 놓인 벽의 가치는 0이다.
- 좌측에서 두 번째 게임의 점수도 17점이고 (1, 3) 칸에 놓인 벽의 가치도 0이다.
- 좌측에서 세 번째 게임의 점수는 9점이고 (2, 3번 말의 최소 거리가 , 로 낮아지기 때문), 따라서 (2, 3) 칸에 놓인 벽의 가치는 8이다.
- 좌측에서 네 번째 게임의 점수는 13점이고 (2, 3번 말의 최소 거리가 , 로 낮아지기 때문), 따라서 (3, 2) 칸에 놓인 벽의 가치는 4이다.
- 좌측에서 다섯 번째 게임의 점수는 17점이고 따라서 (3, 3) 칸에 놓인 벽의 가치는 0점이다.
- 이렇게 다섯 개의 벽의 가치를 모두 구한 후 더해보면 가 된다 -- 이를 벽의 가치 총합이라 하자.
게임 보드의 상태가 주어졌을 때, 기존 게임의 점수 를 구하고 모든 벽의 가치 총합도 구해보자.