서로 공격하지 않도록 기물 제거하기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

체스에서 기물을 잃지 않으려면 애초에 서로 마주치지 않게 두는 것이 좋은 전략이다. IBM은 딥블루에게 이 전략을 가르치려고 한다. 그래서 보드에 남은 기물끼리 아무도 서로를 공격하지 않는 상태로 만들려면 기물을 최소 몇 개 없애야 하는지 구하는 프로그램이 필요하다.

모든 기물은 일반적인 체스 규칙대로 공격한다.

  • 킹(King): 상하좌우와 대각선으로 인접한 칸을 공격한다.
  • 퀸(Queen): 상하좌우와 대각선으로 거리 제한 없이 공격한다.
  • 비숍(Bishop): 대각선으로 거리 제한 없이 공격한다.
  • 룩(Rook): 상하좌우로 거리 제한 없이 공격한다.
  • 나이트(Knight): L자로 공격한다. 상하좌우 중 한 방향으로 두 칸 간 다음, 그와 직각인 방향으로 한 칸 간 자리가 공격 범위다. 아래 그림을 참고한다.
  • 폰(Pawn): 이 문제에 폰은 나오지 않는다.
---------------
| | |*| |*| | |
---------------
| |*| | | |*| |
---------------
| | | |N| | | |
---------------
| |*| | | |*| |
---------------
| | |*| |*| | |
---------------
N = 나이트
* = 나이트가 공격할 수 있는 칸

두 기물 사이를 다른 기물이 막고 있는 상황까지 따져도 답은 같으므로, 경로가 막히는지는 신경 쓰지 않아도 된다.

입력

입력은 최대 100개의 데이터 셋으로 이루어지고, 데이터 셋 사이를 구분하는 빈 줄은 없다. 보드는 최대 10x10이며, 한 데이터 셋에 놓인 기물은 최대 15개다.

각 데이터 셋은 다섯 부분으로 나뉜다.

  1. 첫 줄에 START가 주어진다.
  2. 다음 줄에 보드의 가로 길이 ww가 주어진다. (1w101 \le w \le 10)
  3. 다음 줄에 보드의 세로 길이 hh가 주어진다. (1h101 \le h \le 10)
  4. 이어지는 hh개의 줄에 보드의 모양이 주어진다. 각 줄에는 글자 ww개가 공백으로 구분되어 있고, nn번째 줄이 보드의 nn번째 행이다. 각 글자의 뜻은 다음과 같다.
    • K: 킹
    • Q: 퀸
    • R: 룩
    • B: 비숍
    • N: 나이트
    • E: 빈 칸
  5. 마지막 줄에 END가 주어진다.

입력은 파일의 끝에서 끝난다.

출력

데이터 셋마다 한 줄씩 다음 형식으로 출력한다. 출력 사이를 구분하는 빈 줄은 없다.

Minimum Number of Pieces to be removed: X

여기서 X는 남은 기물끼리 서로 공격하지 않게 만들려고 제거해야 하는 기물의 최소 개수다.