본문 바로가기
알고리즘

백준 1018번 체스판 다시 칠하기

by Lihano 2021. 9. 14.
반응형

풀이 언어 : PYTHON

풀이 방법 : 브루트포스

# White와 Black을 서로 체인지 시켜주는 함수
def switchWB(s) : 
    if s == "W" :
        return "B"
    elif s == "B":
        return "W"

# 판의 크기 입력
n, m = map(int, input().split())

# 체스판 입력
Map = list()
for _ in range(n) :
    Map.append(input())

# 정답으로 제출할 새로 색칠할 칸의 최솟값
min = 10000000000

for i in range(n-7) :
    for j in range(m-7) :
        # 모든 경우의 수를 순회하면서 8*8 크기를 한 판 잘라냄...
        # 잘라낸 판에서 흰색으로 시작했을 때랑 검은색으로 시작했을 때 
        # 어느 쪽이 새로 칠할 칸의 수가 더 적은지 판단
        
        repair_W = 0 # W로 시작했을 때의 새로 칠할 칸의 수
        repair_B = 0 # B로 시작했을 때의 새로 칠할 칸의 수
        
        first_W = "W"
        first_B = "B"

        for x in range(8) :
            for y in range(8) :
                # 8*8 크기의 판의 모든 칸을 순회
                # 만일 W부터 시작했을 경우 다시 칠해야하는 경우를 카운트
                if first_W != Map[i+x][j+y] :
                    repair_W += 1
                # 만일 B부터 시작했을 경우 다시 칠해야하는 경우를 카운트
                if first_B != Map[i+x][j+y] :
                    repair_B += 1
                # W와 B는 한칸마다 서로 체인지
                first_W = switchWB(first_W)
                first_B = switchWB(first_B)
            # 한 줄의 마지막 칸과 그 다음줄의 첫칸은 서로 같은 색이다
            first_W = switchWB(first_W)
            first_B = switchWB(first_B)
        
        # 8*8 크기의 판에서 새로 고쳐야할 칸의 횟수 중 제일 최소값을 저장한다
        if min > repair_W :
            min = repair_W
        if min > repair_B :
            min = repair_B

print(min)

 

링크

1018번: 체스판 다시 칠하기 (acmicpc.net)

반응형

'알고리즘' 카테고리의 다른 글

백준 10989번 수 정렬하기 3  (0) 2021.09.16
백준 1436번 영화감독 숌  (0) 2021.09.14
백준 7568번 덩치  (0) 2021.09.14
백준 1011번 Fly me to the Alpha Centauri  (0) 2021.09.09
백준 1316번 그룹단어 체커  (0) 2021.09.06

댓글