[백준] 1018 - 체크판 다시 칠하기

MinTa·2021년 4월 18일
0

알고리즘

목록 보기
1/3
post-thumbnail

백준 1018번

n,m = map(int,input().split())

board = []
for _ in range(n):
    board.append(input())

str1 = "WBWBWBWB"
str2 = "BWBWBWBW"

whiteB = [str1,str2,str1,str2,str1,str2,str1,str2]
blackB = [str2,str1,str2,str1,str2,str1,str2,str1]


ans = 2501
for i in range(n-7): # n - 8 + 1 -> 8*8일때도 한번은 돌아야함
    for j in range(m-7):
        cnt = 0
        for k in range(8): # 8개씩 확인
            for l in range(8):
                if board[i+k][j+l] != whiteB[k][l]: # 흰색으로 시작하는 체크판 확인
                    cnt += 1
        ans = min(ans,cnt)

        cnt = 0
        for k in range(8):
            for l in range(8):
                if board[i + k][j + l] != blackB[k][l]: # 검은색으로 시작하는 체크판 확인
                    cnt += 1
        ans = min(ans, cnt)

print(ans)

이 문제는 브루트포스 문제로 처음 위치부터 마지막 위치까지 8*8칸이 만들어지는 경우를 모두 검토해서 그 중 가장 최소의 횟수를 찾아 출력해내는 문제이다. 코드 상의 whiteB, blackB 처럼 ideal board를 만들어놓고 비교하면 되는 것을 생각 못하고 계속 코드 상으로 비교해낼려고 하다가 쉽게 풀지 못하고 계속 꼬였다.그 후에 유투브 로밍맨님의 풀이 영상을 보고 힌트를 얻어 풀었다. 보드를 8개씩 잘라서 비교하는 부분에서 어려움을 느꼈던 것 같다.
(이전에도 못풀었고 오랜만에 다시 풀었는데도 여전히 부족하다..)

profile
지(치지않고)꾸(준히)열(심히)

0개의 댓글