https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
<풀이>
N, M = map(int, input().split())
arr = [list(input()) for _ in range(N)]
result = 64
for i in range(N-7):
for j in range(M-7):
black = 0
white = 0
for k in range(i, i+8):
for l in range(j, j+8):
if (k+l) % 2 == 0:
if arr[k][l] != 'W':
white += 1
else:
black += 1
else:
if arr[k][l] != 'B':
white += 1
else:
black += 1
result = min(min(black, white), result)
print(result)
<풀이>
1. for문 4번 돌려서 8*8 정사각형 탐색한다.
2. 각 행렬의 행과 열의 값을 더 했을 때 짝수면 짝수끼리 홀수면 홀수끼리 색깔이 같아야 하므로 (k + l)%2로 나눠준다.
3. 시작이 black이라고 생각했을 때와 white라고 생각했을 때 경우 각각 바꿔야 하는 개수를 구해서 min으로 구한다.
'파이썬' 카테고리의 다른 글
[백준] 1182번 부분수열의 합 (파이썬) (0) | 2022.06.07 |
---|---|
[백준] 1181번 단어정렬 (파이썬) (0) | 2022.06.07 |
[백준] 1987번 알파벳 (파이썬) (0) | 2022.06.06 |
[백준] 1697번 숨바꼭질 파이썬 (0) | 2022.06.03 |
[프로그래머스 Level1] 키패드 누르기 (0) | 2022.06.02 |