CodingTest/Baekjoon

[baekjoon] 백준 1018번(파이썬): 체스판 다시 칠하기

JunJangE 2022. 3. 6. 23:20

문제

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

알고리즘

- 반복문을 통해 체스판을 확인한다. 이때, 8X8 체스판의 크기만큼 잘라 확인한다.

- W로 시작하는 경우와 B로 시작하는 경우를 나누어 확인한다.

- 8X8 범위 체스판을 확인할 때 행과 열의 합이 짝수, 홀수이면 각각 일정한 색을 가지게 된다.(체크무늬)

- 각각 일정한 색을 가질 때 다른 색을 가지는 경우를 카운트하여 제일 적은 경우를 출력한다.

코드

import sys


n, m = map(int, sys.stdin.readline().split())
graph = [list(map(str, sys.stdin.readline().strip())) for _ in range(n)]
cnt = []

# 반복문을 통해 체스판을 확인(8x8 범위로 짜른다.)
for i in range(n - 7):
    for j in range(m - 7):
        w = 0 # w로 시작하는 경우
        b = 0 # b로 시작하는 경우
        
        # 8x8 범위 체스판을 확인
        for k in range(i, i + 8):
            for l in range(j, j + 8):
                # 행과 열의 합이 짝수, 홀수이면 각각 일정한 색을 가지게 된다.
                if (l + k) % 2 == 0:
                    if graph[k][l] != 'W':
                        w += 1
                    else:
                        b += 1
                else:
                    if graph[k][l] != 'B':
                        w += 1
                    else:
                        b += 1
        cnt.append(w)
        cnt.append(b)

# 일정한 색중에 제일 적은 다른 색의 개수를 출력 
print(min(cnt))

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com