https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net


첫번째 난관, 8*8로 어떻게 잘라낼 것인가.
-> 반복문을 N-7 / M-7로 쪼개서 N-7부터 +8까지 이런식으로 반복문을 돌린다
두번째 난관, 카운트 어떻게 ?
처음엔 그냥 'W'인거 다 센다음에 64에서 빼서 그 차이만큼 카운트하려고 했으나 . .
개수만 문제가 아니라, W와 B가 번갈아 가면서 나와야함 !!
-> W로 시작할때랑 B로 시작할때를 따로 카운트함
실버4가 왜이렇게 어려운건데 !
카운트 구하기

행과 열의 합이 짝수면 -> 시작 지점과 같은 색이여야함
체스판에 이런 규칙이 있었다니 . . 정말 신기하다
이를 이용해서 W로 시작했을 때와 B로 시작했을 때를 구분해서 카운트 할 수 있음
1. W로 시작하고 행과 열이 짝수 -> W가 와야함
2. W로 시작하고 행과 열이 홀수 -> B가 와야함
만약 다른 색이라면, 카운트를 올린다
N, M = map(int,input().split())
arr = [list(map(str,input())) for _ in range(N)]
cnts = []
for i in range(N-7):
for j in range(M-7):
# d1 = W로 시작할 때 / d2 = B로 시작할 때
w_start, b_start = 0,0
# 8칸씩 자르기
for a in range(i, i+8):
for b in range(j, j+8):
# 행과 열의 합이 짝수 == 시작 지점과 같다
if (a+b) % 2 == 0:
if arr[a][b] != 'B':
w_start += 1
if arr[a][b] != 'W':
b_start += 1
# 행과 열의 합이 홀수 == 시작 지점과 다름
else:
if arr[a][b] != 'W':
w_start += 1
if arr[a][b] != 'B':
b_start += 1
cnts.append(w_start)
cnts.append(b_start)
print(min(cnts))
'백준 문제풀이 > 구현' 카테고리의 다른 글
[백준] 2839 설탕 배달 - python (0) | 2023.04.05 |
---|---|
[백준] 1436 영화감독 숌 - python (1) | 2023.04.05 |