시간제한 : 2초
메모리제한 : 128MB
문제 :
지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.
체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.
보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
출력 :
첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.
풀이
체스판을 i행 x j열로 이루어진 배렬이라고 가정한다면, (i, j)가 나타내는 위치에 따라 검은색('B'), 흰색('W')이 결정된다.
이해를 쉽게 하기 위해 3 x 3로 이루어진 배열을 생각해보자. 문제에 따르면, 이러한 배열은 두 가지가 있을 수 있다.(1)[ [W, B, W] (2) [[B, W, B] [B, W, B] [W, B, W] [W, B, W]] [B, W, B]]
이 두 배열을 보면, i+j 값이 짝수인 경우와 홀수인 경우로 W,B의 값이 다르게 정해지는 것을 확인할 수 있다.
예를 들면, 배열 (1)에서는 i+j의 값이 짝수인 경우 W, 홀수인 경우 B이다.
이 규칙을 활용하여 주어진 N x M 배열의 모든 값을 살펴보면서 바꿔야 하는 값의 개수를 구할 수 있다.
먼저, N과 M의 모든 범위를 살펴보기 위해 N, M의 범위만큼 반복문을 수행한다.
이때 위의 예에서 알 수 있듯, 배열은 (1,1)이 W이거나 B인 두 가지 경우가 있으므로, 각각의 경우에서 발생하는 변수를 저장하기 위해 두 가지 변수를 설정한다.
그 후, N과 M의 범위 내에서 8 x 8의 체스판을 잘라내야 하므로, 가로 세로 범위를 8로 설정하여 다시 반복문을 수행한다.
이 반복문을 통해 변경해야 하는 요소의 개수를 두 가지 경우에 맞춰 따로 저장한 후, 둘 중 더 작은 값을 cnt 리스트에 추가한다.
반복문이 끝난 후, cnt 리스트에 추가되어 있는 값 중 최소값을 출력하면 변경해야 하는 값의 최소값을 구할 수 있다.
N, M = map(int, input().split())
original = []
cnt = []
for _ in range(N):
original.append(input())
for a in range(N-7):
for b in range(M-7):
case1 = 0
case2 = 0
for i in range(a, a+8):
for j in range(b, b+8):
if (i+j) % 2 == 0:
if original[i][j] != 'W':
case1 += 1
if original[i][j] != 'B':
case2 += 1
else:
if original[i][j] != 'B':
case1 += 1
if original[i][j] != 'W':
case2 += 1
cnt.append(min(case1, case2))
print(min(cnt))
'코딩 연습' 카테고리의 다른 글
[백준 11047] 동전 0 / 파이썬 (그리디알고리즘) (0) | 2022.10.01 |
---|---|
[백준 1436] 영화감독 숌 / 파이썬 (0) | 2022.09.28 |
[백준 7568] 덩치 / 파이썬 (2) | 2022.09.20 |
[백준 2231] 분해합 / 파이썬 (0) | 2022.09.19 |
[백준 10757] 큰수 A+B / 파이썬 (0) | 2022.09.15 |