알고리즘

[BOJ/완전탐색] 1018 체스판 다시 칠하기

motti 2023. 5. 23. 09:01
반응형

문제링크 : https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net


풀이

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

cnt = []
board = [list(input()) for _ in range(n)]

for a in range(n - 7):
    for b in range(m - 7):  # 8*8로 자르기 위해, -7해준다
        w_index = 0  # 흰색으로 시작
        b_index = 0  # 검은색으로 시작
        for i in range(a, a + 8):  # 시작지점
            for j in range(b, b + 8):  # 시작지점
                if (i + j) % 2 == 0:  # 짝수인 경우
                    if board [i][j] != 'W':  # W가 아니면, 즉 B이면
                        w_index += 1  # W로 칠하는 갯수
                    else:  # W일 때
                        b_index += 1  # B로 칠하는 갯수
                else:  # 홀수인 경우
                    if board [i][j] != 'W':  # W가 아니면, 즉 B이면
                        b_index += 1  # B로 칠하는 갯수
                    else:
                        w_index += 1  # W로 칠하는 갯수

        cnt.append(w_index)  # W로 시작할 때 경우의 수
        cnt.append(b_index)  # B로 시작할 때 경우의 수
print(min(cnt))
  1. 체스판이 돌아갈때 짝수의 위치는 첫번째값과 모두 같아야 한다.
  2. 반면, 홀수일 경우는 달라야한다. 즉, 첫번째 값이 W라면 모든 짝수의 위치는 W이어야하고 홀수의 위치는 B이어야 한다.
  3. 첫번째 값이 흰색으로 시작하는 경우와 검은색으로 시작하는 경우 둘다 구해서 최소값을 산출한다.
반응형

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

[BOJ/백트래킹] N과 M (3)  (0) 2023.05.23
[BOJ/백트래킹] N과 M (2)  (0) 2023.05.23
[BOJ/그리디] 1931 회의실배정  (0) 2023.05.15
[BOJ/그리디] 13305 주유소  (0) 2023.05.15
[BOJ/그리디] 1541 잃어버린 괄호  (0) 2023.05.15