[브루트포스/ BaekJoon] # 1018 체스판 다시 칠하기

su_y2on·2022년 3월 10일
0

알고리즘

목록 보기
34/47
post-thumbnail

백준 1018번
주어진 패턴에서 최소의 수정으로 8x8크기의 체스판을 만들기



풀이 1. 브루트포스

  • isChess함수 : 이 함수는 체스판 시작점(x,y)를 넣어주면 체스판으로 만드는데 변경해야할 최소 블럭수를 반환해줍니다. change[0]은 흰검흰검...체스판을 만들기위해 change[1]은 검흰검흰..체스판을 만들기위한 변경개수를 세는 것이고 따라서 반환은 둘중에 작은 것으로 해줍니다.

  • 바꿀지 말지 판단기준 : 판단기준은 체스판을 좌표로 생각해서 구해줬어요. std는 기준인데요 시작좌표의 색깔과 같아요. 시작좌표(0,0)와 변화량이 홀수(1,0)면 기준과 달라야하고 변화량이 짝수(1,1)에 있는 좌표의 색은 기준과 같아야해요.

import sys

first = input().split()
row = int(first[0])
col = int(first[1])

board = []
result = sys.maxsize

for _ in range(row):
    board.append(list(input()))

def isChess(x,y):
    std = ['W','B']
    change = [0,0]

    for i in range(8):
        for j in range(8):
            if (i+j) % 2 == 0: # 변화량이 짝수
                if board[x+i][y+j] == std[0]:
                    change[1] += 1
                else:
                    change[0] += 1
            else: # 변화량이 홀수
                if board[x+i][y+j] == std[0]:
                    change[0] += 1
                else:
                    change[1] += 1

    return min(change)

for i in range(row-7):
    for j in range(col-7):
        result = min(result,isChess(i,j))

print(result)
  • 요런 격자식문제는 좌표로 접근해보는 것도 좋은 것같아요! 좌표가 복잡할 것 없이 수학적으로 규칙을 찾아내기에 편한것같습니다~👍

0개의 댓글