만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Moloco의 Tap Titanz (Hard)

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

요약
n x n 두 색 칸판에서 한 번 누르면 같은 색으로 연결된 영역 전체가 뒤집힐 때, 칸판 전체를 한 색으로 만드는 최소 횟수를 구한다.
난이도

보통10점 중 7점

유형
그래프, BFS, 그리디, 동적 계획법
정답자
아직 제출이 없습니다

문제

Moloco 직원 중에는 Tap Titanz 같은 클리커 게임을 즐기는 사람이 있다.

Tap Titanz는 각 칸이 검은색이거나 흰색인 n×nn \times n 판에서 진행한다. 변을 맞대고 있는 두 칸은 인접하다고 한다. 같은 색 칸만 거쳐 인접한 칸을 따라 한 칸에서 다른 칸까지 갈 수 있으면 두 칸은 연결되어 있다고 한다. 연결된 두 칸의 색은 항상 같다.

플레이어가 칸 하나를 누르면 그 칸의 색이 반대 색으로 바뀌고, 그 칸과 같은 색이던 인접한 칸, 다시 그 칸과 같은 색이던 인접한 칸도 차례로 색이 바뀐다. 즉, 누른 칸과 그 칸에 연결된 모든 칸의 색이 동시에 반대 색으로 바뀐다.

모든 칸의 색이 같아지면, 그러니까 전부 검은색이거나 전부 흰색이 되면 게임이 끝난다. 누르는 횟수를 최소로 하는 것이 목표이다.

입력

첫째 줄에 정수 nn이 주어진다. (1≤n≤251 \le n \le 25)

다음 nn개의 줄에 판의 각 행이 위에서부터 순서대로 주어진다. 각 줄은 길이가 nn인 문자열이고, 'B'는 검은색 칸, 'W'는 흰색 칸을 뜻한다.

출력

모든 칸의 색을 같게 만들기 위해 눌러야 하는 최소 횟수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3
    BWB
    WBW
    WWW
    
    예상 출력
    2
    
  2. 예제 2

    입력
    2
    BW
    WB
    
    예상 출력
    2