코딩하는 해맑은 거북이
[Python] 체스판 다시 칠하기 - 백준 본문
해당 글은 백준 1018번 문제 '체스판 다시 칠하기'를 다룬다.
문제
https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
설명
입력된 보드판에서 8x8 크기의 체스판으로 행과 열을 하나씩 이동해가며 두가지 케이스를 비교하면 된다.
한 행의 8개의 값은 ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'] 또는 ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']를 가지게 된다.
이러한 두가지 케이스를 비교해서 다르면 +1을 해주고, 나온 모든 경우의 수 중에 최솟값을 출력해주면 된다.
코드
n, m = map(int, input().split())
case1 = []
case2 = []
for i in range(m):
if i % 2 == 0:
case1.append('W')
case2.append('B')
else:
case1.append('B')
case2.append('W')
board = []
for i in range(n):
board.append(list(input()))
sum1 = 0
sum2 = 0
result = []
for r in range(n-7):
for c in range(m-7):
sum1, sum2 = 0, 0
for i in range(r, r+8):
for j in range(c, c+8):
if i % 2 == 0:
if case1[j] != board[i][j]:
sum1 += 1
if case2[j] != board[i][j]:
sum2 += 1
else:
if case2[j] != board[i][j]:
sum1 += 1
if case1[j] != board[i][j]:
sum2 += 1
result.append(min(sum1, sum2))
print(min(result))
'코딩테스트' 카테고리의 다른 글
[Python] 영역 구하기 - 백준 (DFS) (0) | 2023.01.17 |
---|---|
[Python] 잃어버린 괄호 - 백준 (그리디) (0) | 2023.01.17 |
[Python] 큐 - 백준 (0) | 2023.01.16 |
[Python] 수 찾기 - 백준 (이진탐색) (0) | 2023.01.16 |
[Python] 동전 0 - 백준 (그리디) (0) | 2023.01.14 |
Comments