알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 체스판 다시 칠하기(1018)

HRuler 2023. 1. 10. 17:34

1. 문제

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 줄, m : 칸
n, k = map(int, input().split())

# chess_l : chess판 색을 저장할 리스트
chess_l = [input() for i in range(n)]

n_num, k_num = n - 8, k - 8

# min_cnt : 가장 적게 
min_cnt = 64
for p in range(0, n_num + 1):
    for q in range(0, k_num + 1):
#         print('p :', p, 'q :', q)
        cnt = 0
        stan = 'B'
        for i in chess_l[0+p:8+p]:
            for j in i[0+q:8+q]:
                if stan != j:
                    cnt += 1
                if stan == 'B':
                    stan = 'W'
                else:
                    stan = 'B'
            if stan == 'B':
                stan = 'W'
            else:
                stan = 'B'
        if cnt >= 32:
            cnt = 64 - cnt
#         print('cnt :', cnt)
        min_cnt = min(min_cnt, cnt)
        if min_cnt == 0:
            break
    if min_cnt == 0:
        break
print(min_cnt)

3. 후기

 - 문제를 보고 8 * 8로 나눠서 찾는다는 조건을 확인하지 못하고 주어진 전체 판을 모두 확인하는 것으로 이해하여 전체를 기준으로 해결을 진행하였는데, 코드 작성 중 8 * 8의 조건을 발견하였고 다시 코드를 작성하여 해결하였다.

 문제 지문이 길어도 제대로 문제를 이해하고 코드를 작성하는 습관을 갖는 것이 좋은 개발자라 할 수 있겠다.