1018번: 체스판 다시 칠하기

임성빈·2022년 1월 18일
0

백준 문제풀이

목록 보기
4/10
post-thumbnail

import sys
input = sys.stdin.readline

n, m = map(int, input().split())

li = []
mini = []

for _ in range(n):
    li.append(input())

for i in range(n - 7):
    for j in range(m - 7):
        a = 0
        b = 0
        for k in range(i, i + 8):
            for l in range(j, j + 8):
                if (k + l) % 2 == 0:
                    if li[k][l] != 'W':
                        a += 1
                    if li[k][l] != 'B':
                        b += 1
                else:
                    if li[k][l] != 'B':
                        a += 1
                    if li[k][l] != 'W':
                        b += 1
        mini.append(a)
        mini.append(b)
print(min(mini))

첫째 줄 n,m 을 입력 받고 li , mini 리스트를 만들어 둔다.

체스판을 반복문을 통해 li 안으로 넣어준다.

브루트 포스 알고리즘 답게 4중 for 문으로 해결해 주었다.

처음 2개의 반복은 n - 7 의 범위를 잡아 8 이상의 어떤 n,m 에서도 범위 설정에서 오류가 나지 않게 한다.

다시 칠해는 최솟값 a,b = 0,0 으로 설정한다.

그 후 2중 반복문 안의 또다른 2중 반복을 통해 8 * 8 크기의 체스판을 확인해 준다.

체스판을 확인하는 방법은

if (k + l) % 2 == 0 으로 2가지 경우,
즉 처음 오는 색이 'W' 인 경우와 else 로 'B' 가 오는 경우를 만든다.

if 문 안에 다시 if 를 넣어 그 자리 알맞은 색상이 아닐 경우 a,b 에 ++1 해주는 방법을 선택했다.

이렇게 a,b 값을 (a == 처음 색이 'B'일 경우 / b == 처음 색이 'W'일 경우) mini 리스트에 넣고
둘 중 작은 값을 출력한다.

profile
iOS 앱개발

0개의 댓글

관련 채용 정보