http://acmicpc.net/problem/1018
{코드}
n, m = map(int, input().split())
data = [input() for _ in range(n)]
ans = 65
for x in range(n-7):
for y in range(m-7):
b = 0 # 검은색으로 시작
w = 0 # 흰색으로 시작
# 의미상 인덱스의 합이 짝수일때를 시작으로 봄
for s in range(x, x+8):
for e in range(y, y+8):
if (s+e)%2: # 홀수
if data[s][e] != 'B': # 흰색 시작이면 홀수일때 검은색이어야 하는데 아니므로 w추가
w += 1
else: # 검은색 시작이면 홀수일때 흰색이어야 하는데 아니므로 b추가
b += 1
else: # 짝수
if data[s][e] != 'W': # 흰색 시작 - 흰 색이 아니므로 w추가
w += 1
else: # 검은색 시작 - 검은 색이 아니므로 b추가
b += 1
ans = min(ans, b, w)
print(ans)
{설명}
기본 코드는 주어진 판을 8*8로 쪼개가며 흰색으로 시작할 때와 검은색으로 시작할 때 몇 개를 수정해야 하는지 확인하고 최소인 것을 찾아 출력하는 코드입니다.
문제 해석 능력이 중요하다는 점을 일깨워준 문제입니다. 각 부분의 의미는 주석을 봐주시기 바랍니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 2750번-파이썬/Python] 수 정렬하기 (0) | 2020.12.26 |
---|---|
[백준 1436번-파이썬/Python] 영화감독 숌 (0) | 2020.12.26 |
[백준 7568번-파이썬/Python] 덩치 (0) | 2020.12.25 |
[백준 2331번-파이썬/Python] 분해합 (0) | 2020.12.24 |
[백준 2798번-파이썬/Python] 블랙잭 (0) | 2020.12.23 |