아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

육각 보드

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

요약
N×N 육각 판에서 색칠해야 할 칸들이 주어질 때, 변을 공유하는 칸끼리 다른 색이 되도록 하는 최소 색의 수를 구한다.
난이도

보통10점 중 7점

유형
그래프, 그리디, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

크기가 N×NN \times N인 육각 보드가 주어진다. 아래 그림은 N=1,2,3,4N = 1, 2, 3, 4인 경우이다.

ii번째 줄은 i−1i-1번째 줄보다 오른쪽으로 반 칸 밀려 있다. 따라서 (i,j)(i, j)칸은 보드 안에 있는 (i,j−1)(i, j-1), (i,j+1)(i, j+1), (i−1,j)(i-1, j), (i−1,j+1)(i-1, j+1), (i+1,j−1)(i+1, j-1), (i+1,j)(i+1, j)칸과 변을 공유한다.

육각 보드의 일부 칸을 색칠하려고 한다. 변을 공유하는 두 칸은 같은 색으로 칠할 수 없다.

어떤 칸을 색칠해야 하는지 주어졌을 때, 필요한 색의 종류 수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN이 주어진다. (1≤N≤501 \le N \le 50)

둘째 줄부터 NN개의 줄에 걸쳐 각 칸의 정보가 주어진다. 각 줄은 길이가 NN인 문자열이다. 위에서 ii번째 줄(0≤i≤N−10 \le i \le N-1)의 왼쪽에서 jj번째 문자(0≤j≤N−10 \le j \le N-1)가 (i,j)(i, j)칸을 나타내고, '-'이면 색칠하지 않는 칸, 'X'이면 색칠해야 하는 칸이다.

출력

첫째 줄에 필요한 색의 종류 수의 최솟값을 출력한다. 색칠할 칸이 하나도 없으면 00을 출력한다.

예제3

  1. 예제 1

    입력
    3
    ---
    ---
    ---
    
    예상 출력
    0
    
  2. 예제 2

    입력
    4
    -X--
    ---X
    ----
    -X--
    
    예상 출력
    1
    
  3. 예제 3

    입력
    4
    XXXX
    ---X
    ---X
    ---X
    
    예상 출력
    2