폰의 복수

시간 제한1초메모리 제한512 MB

요약
N×N 체스판에서 킹이 차지한 칸과 겹치지 않게 폰을 놓아, 아래쪽 대각선에서 모든 상대 기물을 공격하도록 하는 최소 폰 수를 구한다. 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 시뮬레이션, 구현, 행렬
정답자
아직 제출이 없습니다

문제

교수와 특별한 체스 게임을 하던 중, 당신은 거의 패배할 상황에 놓였다. 남은 기물은 킹 하나뿐이다. 마침 교수가 전화를 받으러 방을 나간 사이, 당신은 살짝 반칙을 해서 판 위에 폰을 몇 개 더 놓아 상대 기물이 모두 공격받는 상태로 만들기로 했다. 폰은 자기 기준으로 왼쪽 위와 오른쪽 대각선 칸을 공격하고, 킹은 인접한 여덟 칸(대각선으로 인접한 칸 포함)을 공격한다. 한 칸에 두 기물을 겹쳐 놓을 수는 없다. 이 작업을 끝내려면 폰이 최소 몇 개나 필요할까?

입력

첫째 줄에 판의 한 변의 길이인 N이 주어진다. 8 ≤ N ≤ 1000이다. 게임은 N x N 체스판에서 진행된다. 이어지는 N개의 줄에는 각각 판을 나타내는 N개의 문자가 주어진다. -는 빈칸, *는 교수의 기물, K는 당신의 킹을 의미한다. 당신의 폰은 위쪽(입력에서 먼저 나오는 행 방향)으로 이동한다.

출력

교수의 모든 체스 기물을 공격하는 데 필요한 폰의 최소 개수를 한 줄에 출력한다. 불가능하면 −1을 출력한다.

예제1

  1. 예제 1

    입력
    8
    -*-*----
    --------
    --------
    --------
    -----*K-
    --------
    --*-----
    --------
    
    예상 출력
    2