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 조건문을 잘 생각할 수 없었다.
다른 사람들이 푼 코드를 참고해봤는데도 이해가 완벽하게 안된다.
저녁에 다시 풀어봐야겠다..🥺
반응형