감자튀김 공장🍟

[백준/1018] 체스판 다시 칠하기 (with 파이썬) 본문

Algorithm/BOJ

[백준/1018] 체스판 다시 칠하기 (with 파이썬)

Potato potage 2022. 11. 28. 14:58
반응형

✔ 문제


풀이

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
board = [list(map(str, input())) for _ in range(n)]
res = []

for a in range(n-7):
    for b in range(m-7):
        w_count = 0
        b_count = 0

        for i in range(a, a+8):
            for j in range(b, b+8):
                if (i + j) % 2 == 0: # 0,1로 구분해 b,w 중 어떤 것을 색칠할 것인지 구분
                    if board[i][j] != 'W': # B이면
                        w_count += 1 # W로 색칠
                    else: # W이면
                        b_count += 1 # B로 색칠
                else:
                    if board[i][j] != 'W': # B이면
                        b_count += 1 # B로 색칠
                    else: # W이면
                        w_count += 1 # W로 색칠
        res.append(w_count) # W로 시작 시 경우의 수
        res.append(b_count) # B로 시작 시 경우의 수

print(min(res))

✔ 설명

전체 체스판에서 8x8 체스판을 만들어야 하므로 4중 for문이 필요하다.

 

if (i + j) % 2 == 0:

이 조건문을 통해 다시 색칠 해야하는 B, W를 구분하여 색칠할 수 있다.

 

1. 만약 해당 조건문의 결과가 0인 경우 (짝수), 시작점의 색깔과 같아야 하며 해당 값이 w인지 아닌지 구분해 w_count와 b_count를 증가시킨다.

ex) 조건문이 짝수인 경우 >> 해당 값이 B이면 W로 색칠해야함 >> w_count += 1

ex) 조건문이 짝수인 경우 >> 해당 값이 W이면 B로 칠해야함 >> b_count += 1

 

2. 만약 해당 조건문의 결과가 1인 경우 (홀수), 시작점의 색깔과 달라야하며 해당 값이 w인지 아닌지 구분해 w_count와 b_count를 증가시킨다.

ex) 조건문이 홀수인 경우 >> 해당 값이 B이면 B로 색칠해야함 >> b_count += 1

ex) 조건문이 홀수인 경우 >> 해당 값이 W이면 W로 칠해야함 >> w_count += 1


✔ 후기

for문을 4개 쓰는 것까지는 생각했는데 if 조건문을 잘 생각할 수 없었다.

다른 사람들이 푼 코드를 참고해봤는데도 이해가 완벽하게 안된다.

저녁에 다시 풀어봐야겠다..🥺

반응형
Comments