[백준 BOJ_1018] 체스판 다시 칠하기 Python 풀이
출처: 백준 온라인 저지
문제
풀이
우선 칠해야 하는 칸의 수를 반환해주는 check 함수를 따로 만들었습니다.
board와 시작하는 좌표 y와 x의 값을 받고 주어진 y와 x에서 시작하여 64개의 칸을 모두 체크하며 칠해야 하는 칸의 수를 세어 주었습니다.
패턴의 시작을 흰색으로 시작하는지, 검은색으로 시작하는지에 따라 칠해야 하는 칸의 수가 달라지기 때문에, 처음에 광역변수로 두가지 패턴을 저장해주었습니다.
이중 for loop으로 첫번째 패턴으로 시작하는 경우와 두번째 패턴으로 시작하는 경우의 수를 찾아 둘 중 더 낮은 수를 반환해줍니다.
8*8의 체스판을 칠하는 경우 중 가장 최악의 경우는 모든 칸이 흰색이거나 검은색일 경우이며, 그 경우 칠해줘야 하는 칸의 수는 64의 절반인 32이므로 처음 result 값을 32로 저장해주었습니다.
board의 범위를 벗어나지 않는 시작 좌표들을 체크해준 뒤 그 값이 result값보다 작을 경우, result값을 바꿔줍니다.
코드
pattern = [ "WBWBWBWB",
"BWBWBWBW"]*
def check(board, y, x):
ret0 = 0
ret1 = 0
for i in range(8):
for j in range(8):
if board[y+i][x+j] != pattern[i%2][j]:
ret0 += 1
if board[y+i][x+j] != pattern[(i+1)%2][j]:
ret1 += 1
return min(ret0, ret1)
N, M = map(int, input().split())
board = [ input() for _ in range(N) ]
result = 32
for i in range(N-7):
for j in range(M-7):
num = check(board, i, j)
if result > num:
result = num
print(result)
Leave a comment