[백준] 브루트 포스 - 1018번: 체스판 다시 칠하기

imyo·2020년 9월 19일
0

알고리즘

목록 보기
16/39
post-thumbnail

체스판 다시 칠하기


Python Code

import sys

def checkCorrect(lst):	#8*8 체스판이 제대로 칠해져 있는지 확인하는 함수
    change1 = 0
    change2 = 0
    temp = 'W'	#맨 왼쪽 위 칸이 흰색인 경우
    for i in range(8):
        for j in range(8):
            if lst[i][j] != temp:
                change1 += 1
            temp = ("B" if temp == 'W' else 'W')	#W->B, B->W로 번갈아가며 비교
        temp = ("B" if temp == 'W' else 'W')	#줄이 바뀔 때는 W->W, B->B로 가므로 한 번 더 바꿈

    temp = 'B'	#맨 왼쪽 위 칸이 검은색인 경우
    for i in range(8):
        for j in range(8):
            if lst[i][j] != temp:
                change2 += 1
            temp = ("B" if temp == 'W' else 'W')
        temp = ("B" if temp == 'W' else 'W')
    return min(change1, change2)	#맨 왼쪽 위 칸이 흰색인 경우와 검은색인 경우 둘 중에 다시 칠해야 하는 개수가 적은 경우를 리턴

a = sys.stdin.readline().rstrip()
a = list(map(int, a.split()))
chess = []
for i in range(a[0]):
    chess.append(sys.stdin.readline().rstrip())

changes = []	#전체 체스판을 8*8로 잘라 각각의 경우 몇 개를 다시 칠해야 하는지 저장하는 리스트
for i in range(a[0]-7):
    for j in range(a[1]-7):
    	#전체 체스판을 8*8로 잘라 모든 경우를 확인함
        temp = [k[j:j+8] for k in chess[i:i+8]]
        changes.append(checkCorrect(temp))
print(min(changes))	#다시 칠해야 하는 개수가 가장 적은 경우를 리턴
profile
(●⁰౪⁰●)

0개의 댓글

관련 채용 정보