[백준 1018번-파이썬/Python] 체스판 다시 칠하기
알고리즘 공부/BOJ백준 풀이

[백준 1018번-파이썬/Python] 체스판 다시 칠하기

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로 쪼개가며 흰색으로 시작할 때와 검은색으로 시작할 때 몇 개를 수정해야 하는지 확인하고 최소인 것을 찾아 출력하는 코드입니다.

문제 해석 능력이 중요하다는 점을 일깨워준 문제입니다. 각 부분의 의미는 주석을 봐주시기 바랍니다.