개발 연습장/백준 문제풀이

[파이썬, Python] 백준 1018: 체스판 다시 칠하기

LooanCheong 2023. 1. 20. 11:39
반응형

문제

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

코드

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
origin = []
cnt = []

for _ in range(n):
    origin.append(input())
    
for a in range(n-7):
    for b in range(m-7):
        index1 = 0
        index2 = 0
        for i in range(a, a+8):
            for j in range(b, b+8):
                if (i+j) % 2 == 0:
                    if origin[i][j] != 'W':
                        index1 += 1
                    elif origin[i][j] != 'B':
                        index2 += 1
                else:
                    if origin[i][j] != 'B':
                        index1 += 1
                    elif origin[i][j] != 'W':
                        index2 += 1
        cnt.append(min(index1, index2))
print(min(cnt))

설명

우선 나무판의 원형을 입력 받아준다.

이후 나무판의 첫 부분부터 끝 부분에서 8칸 떨어진 부분까지를 시작점으로 잡고 모든 부분을 비교한다.

비교를 할 때 첫 시작이 하얀 부분일 경우와 검은 부분일 경우를 나누어 계산해주고,
색을 바꿔주어야 한다면 index의 카운트를 하나 올려준다.

결괏값의 최솟값을 cnt에 넣어주고,
모든 비교가 종료되면 cnt의 가장 최솟값을 출력해준다.

반응형