Algorithm Study/Python

[백준 파이썬] #1018 체스판 다시 칠하기

728x90
반응형

풀기 전 생각해보기😮

  • 이차원 배열의 탐색

풀이🛫

N, M = map(int, input().split())    # N개의 행, M개의 열
arr = [list(input()) for _ in range(N)]

white = [[0] * 8 for _ in range(8)]
black = [[0] * 8 for _ in range(8)]

for col in range(8):
    for row in range(8):
        if (col+row)%2 == 0:
            white[col][row] = 'W'
            black[col][row] = 'B'
        else:
            white[col][row] = 'B'
            black[col][row] = 'W'

li = []
for col in range(N-8+1):
    for row in range(M-8+1):
        wCnt, bCnt = 0, 0
        for i in range(8):
            for j in range(8):
                if arr[col+j][row+i] != white[j][i]:
                    wCnt += 1
                if arr[col+j][row+i] != black[j][i]:
                    bCnt += 1

        li.append(wCnt)
        li.append(bCnt)

print(min(li))

 

핵심 정리🎁

  • 인덱스를 이용해서 체크판을 2개 만들어서 비교했다.
    black : 'b'로 시작하는 체크판
    white : 'w'로 시작하는 체크판

  • 체크판(arr)의 각 지점에서 가로, 세로 8칸 만큼씩 비교해주었다.
    일치하지 않는 값이 가장 적은 지점을 찾아 해당 값을 답으로 도출했다.

 

링크💎

 

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

 

후기 😎

  • 이전에 한번 풀어보겠다고 악을 써도 안풀렸던 문제인데, 체계가 잡혔는지 오랜만의 도전에 풀어낼 수 있었다.