https://www.acmicpc.net/problem/1018
#Solution
BW와 WB판으로 나누어서 풀어야한다는 힌트가 주어졌다. 각각의 판을 전부 BW 혹은 WB로 바꾼 뒤, 가상의 체스판에 1을 넣어준다. 8x8 전수 조사를 통해서 1이 가장 적은 부분을 찾아낸다.
y_axis, x_axis = map(int, input().split())
board = []
for _ in range(y_axis):
board.append(list(map(str, list(input()))))
num_replaced_by_line_BW = [[0 for _ in range(x_axis)] for _ in range(y_axis)]
num_replaced_by_line_WB = [[0 for _ in range(x_axis)] for _ in range(y_axis)]
#BW테스트
for i in range(x_axis):
for j in range(y_axis):
if (i + j) % 2 == 0:
if board[j][i] == 'B':
pass
else:
num_replaced_by_line_BW[j][i] += 1
else:
if board[j][i] == 'W':
pass
else:
num_replaced_by_line_BW[j][i] += 1
#WB테스트
for i in range(x_axis):
for j in range(y_axis):
if (i + j) % 2 == 0:
if board[j][i] == 'W':
pass
else:
num_replaced_by_line_WB[j][i] += 1
else:
if board[j][i] == 'B':
pass
else:
num_replaced_by_line_WB[j][i] += 1
#8x8 행렬 중 최소 값을 찾아내는 과정
min_num = 64
#BW판 최소값
for i in range(7, x_axis) :
for j in range(7, y_axis):
sum_num = 0
for p in range(8):
for q in range(8):
if num_replaced_by_line_BW[j-q][i-p]:
sum_num += 1
if sum_num <= min_num:
min_num = sum_num
#WB판 최소값
for i in range(7, x_axis) :
for j in range(7, y_axis):
sum_num = 0
for p in range(8):
for q in range(8):
if num_replaced_by_line_WB[j-q][i-p]:
sum_num += 1
if sum_num <= min_num:
min_num = sum_num
print(int(min_num))
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#89 백준 파이썬 [11650] 좌표 정렬하기 (0) | 2019.09.08 |
---|---|
#88 백준 파이썬 [1427] 소트인사이드 (0) | 2019.09.08 |
#86 백준 파이썬 [11729] 하노이 탑 이동 순서 (0) | 2019.08.05 |
#85 백준 파이썬 [1436] 영화감독 숌 - 부르트포스 (0) | 2019.07.28 |
#84 백준 파이썬 [1003] 피보나치 함수 - 반복문 (0) | 2019.07.26 |