[백준/python] 1018번 체스판 다시 칠하기

유사개발자·2023년 11월 17일
0

코딩테스트

목록 보기
1/2
post-thumbnail

아 이번거는 너무 어려워서 해설 봤는데도 이해 하는데 오래걸렸다 .. 난이도 실버 맞나 ..

이해가 잘 안됐고 놓친 부분이 체스판이 만약 화이트로 시작하면 인덱스 위치의 합이 짝수 일때 해당 인덱스는 모두 화이트여야 하는데 이걸 놓쳤었다 ..

✍️ 풀이

N, M = map(int, input().split())
board = list()
for i in range(N):
    board.append(input())
repair = list()

# 체스판 시작 범위 설정
# 만약 가로로 브루트 포스할 때 N이 10일때 10-7하면 3이다. 고로 8x8 체스가 가로로 3번만 움직이게끔 하기 위함
for i in range(N-7):
    # 마찬가지로 세로로 브루트 포스할 때 시작 범위 설정
    for j in range(M-7):
        first_W = 0
        first_B = 0
        # 8x8범위의 체스판으로 검증을 시작한다 검증할 것은 화이트로 체스판이 시작할때 or 블랙으로 시작할때의
        # 해당하는 칸이 옳은 색상의 칸인지를 판별하면된다. 만약 화이트로 체스판이 시작된다면 짝수칸이 모두 화이트여야 한다.
        # 그렇지 않다면 해당하는 칸은 잘못된 칸이기 때문에 first_w를 +1 시킨다 블랙일때도 마찬가지
        for k in range(i,i+8):
            for l in range(j,j + 8):
                # 체스 시작이 화이트일때와 블랙일때 모두 구한다 만약 화이트로 시작을 한다고 쳤을때 짝수는 모두 화이트여야한다.
                # 그런데 만약 화이트(W)가 아니라면 그 칸은 잘못된 색상이기에 first_W +1 시킨다
                if (k + l) % 2 == 0:
                    if board[k][l] != 'W':
                        first_W = first_W + 1
                    if board[k][l] != 'B':
                        first_B = first_B + 1
                # 체스 시작이 화이트일때 홀수칸은 블랙이여야만 한다 근데 B가 아니라면 잘못된 칸이므로 first_W +1 시킨다
                else:
                    if board[k][l] != 'B':
                        first_W = first_W + 1
                    if board[k][l] != 'W':
                        first_B = first_B + 1
        # 이제 화이트일때와 블랙일떄의 다시 페인트를 칠한 횟수중 가장 작은 값을 repair에 추가한다
        repair.append(min(first_W, first_B))
        # 가장 작은 페인트칠을 한 수를 출력
print(min(repair))

설명으로 달아논 주석이 잘못되었다면 댓글로 알려주시면 감사하겠습니다!

profile
개발자와 유사한 개발자입니다

0개의 댓글