문제 링크 : https://www.acmicpc.net/problem/1018
풀이
브루트포스 문제이기 때문에 하나하나씩 계산하는 과정이 귀찮을 뿐 풀이가 어렵진 않았다.
import sys
def cnt_sqr(r, c, board, bw): # 8*8로 체스판을 자른 후에 다시 칠해야하는 칸의 수 계산
cnt = 0
if bw == 'B': # 8*8 체스판의 시작칸이 'B'인 경우
for i in range(8):
for j in range(8):
# 'B'여야 하는 칸이지만 'W'가 칠해져 있는 경우 카운트 증가
if (r+i) % 2 == 0 and (j+1) % 2 == 0 and board[r+i][c+j] == 'W':
cnt += 1
# 'W'여야 하는 칸이지만 'B'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 == 0 and (j+1) % 2 != 0 and board[r+i][c+j] == 'B':
cnt += 1
# 'W'여야 하는 칸이지만 'B'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 != 0 and (j+1) % 2 == 0 and board[r+i][c+j] == 'B':
cnt += 1
# 'B'여야 하는 칸이지만 'W'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 != 0 and (j+1) % 2 != 0 and board[r+i][c+j] == 'W':
cnt += 1
else: # 8*8 체스판의 시작칸이 'W'인 경우
for i in range(8):
for j in range(8):
# 'W'여야 하는 칸이지만 'B'가 칠해져 있는 경우 카운트 증가
if (r+i) % 2 == 0 and (j+1) % 2 == 0 and board[r+i][c+j] == 'B':
cnt += 1
# 'B'여야 하는 칸이지만 'W'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 == 0 and (j+1) % 2 != 0 and board[r+i][c+j] == 'W':
cnt += 1
# 'B'여야 하는 칸이지만 'W'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 != 0 and (j+1) % 2 == 0 and board[r+i][c+j] == 'W':
cnt += 1
# 'W'여야 하는 칸이지만 'B'가 칠해져 있는 경우 카운트 증가
elif (r+i) % 2 != 0 and (j+1) % 2 != 0 and board[r+i][c+j] == 'B':
cnt += 1
return cnt
n, m = map(int, sys.stdin.readline().split())
board = [] # 전체 체스판
for _ in range(n):
row = list(sys.stdin.readline().strip())
board.append(row)
min_b = 65 # 자른 체스판의 크기가 8*8이므로 65보다 카운트가 크게 나올 수는 없으므로 초기 최소값을 65로 설정
min_w = 65
for r in range(n-7): # 8*8로 자를 것이기 때문에 0 ~ n-8의 범위 내에서만 시작 칸을 잡을 수 있음
for c in range(m-7):
cnt_b = cnt_sqr(r, c, board, 'B') # 체스판의 시작칸이 'B'인 경우
if cnt_b < min_b: # 기존 최소값보다 새로 계산한 값이 더 작으면 최소값 갱신
min_b = cnt_b
cnt_w = cnt_sqr(r, c, board, 'W') # 체스판의 시작칸이 'W'인 경우
if cnt_w < min_w: # 기존 최소값보다 새로 계산한 값이 더 작으면 최소값 갱신
min_w = cnt_w
print(min(min_b, min_w)) # 'B' 시작, 'W' 시작 둘 중 더 작은 값을 출력
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(Python) 백준 2164번 - 카드 2 (0) | 2023.01.04 |
---|---|
(Python) 백준 1920번 - 수 찾기 (0) | 2023.01.02 |
(Python) 백준 11866번 - 요세푸스 문제 0 (0) | 2022.12.31 |
(Python) 백준 11651번 - 좌표 정렬하기 2 (0) | 2022.12.30 |
(Python) 백준 11650번 - 좌표 정렬하기 (0) | 2022.12.30 |