[BOJ] 1018 체스판 다시 칠하기

[BOJ] 1018 체스판 다시 칠하기

문제 링크

이 문제는 규격내에서 8X8 짜리 체스판이 몇개가 나올 수 있는지 규칙을 찾아야한다. 전체 규격에서 8X8짜리 체스판은 (N-7)*(M-7)개가 나올 수 있다.

시작 좌표는 왼쪽 상단으로 잡는 것이 편하고, 체스판 특성상 첫 색상에 따라서 규칙이 다르게 배열될 수 있기 때문에 첫 칸의 시작 좌표와 첫칸의 색상을 인자로 받는 검사 함수를 하나 작성해준다.

검사 함수에서는 정해진 규격(8X8)에서 시작점이 주어진 첫 칸의 색상과 같은지 확인하는 것으로 시작하여 홀수와 짝수칸을 구분하여 도색이 필요한 칸 수를 누적시킨다.

나의 풀이

import sys
input = sys.stdin.readline

N, M = map(int, input().split(" "))

array = []

temp = 0
ans= 64

for i in range(N):
    array.append(input()[0:M])

#규칙이 있음. (N-7) * (M-7)개의 경우의 수가 나옴

#전체 수 파악하기
def count(y, x, bw):
  global ans
  cnt = 0

  for i in range(8):
    for j in range(8):
      if (i+j)%2:
        if array[y + i][x + j] == bw:
          cnt +=1
      else:
        if array[y + i][x + j] != bw:
          cnt +=1

  ans = min(ans, cnt)


for i in range(N-7):
  for j in range(M-7):
    count(i, j, 'B')
    count(i, j, 'W')

print(ans)

© 2021. All rights reserved.