알고리즘 공부/백준
(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의 조건을 발견하였고 다시 코드를 작성하여 해결하였다.
문제 지문이 길어도 제대로 문제를 이해하고 코드를 작성하는 습관을 갖는 것이 좋은 개발자라 할 수 있겠다.