개미의 개열시미 프로그래밍

[알고리즘] 백준1018 체스판다시칠하기 - 파이썬 본문

알고리즘/그리디 & 구현

[알고리즘] 백준1018 체스판다시칠하기 - 파이썬

YunHyeok 2021. 7. 30. 22:51
728x90
반응형

백준 단계별 풀기 '브루트 포스'의 4번째 문제! 이 문제는 오류 끝에 다른 분의 블로그를 참고했다..ㅜ

 

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

 

[풀이 코드]

from sys import stdin

# n, m입력 받기
n, m = map(int, stdin.readline().split())

# 보드 입력 받기
graph = []
for _ in range(n):
    graph.append(input())

# 결과값담기
result = []

for i in range(n-7):
    for j in range(m-7):
        f_w = 0 # w로 고쳐야하는 경우
        f_b = 0 # b로 고쳐야하는 경우
        for x in range(i, i+8):
            for y in range(j, j+8):
                if (x+y) % 2 == 0:
                    if graph[x][y] != 'W': f_w += 1
                    if graph[x][y] != 'B': f_b += 1
                else:
                    if graph[x][y] != 'B': f_w += 1
                    if graph[x][y] != 'W': f_b += 1
        result.append(f_w)
        result.append(f_b)

print(min(result))

 

[코드 해석]

- 이 문제의 핵심은 w 또는 b로 고쳐야 하는 경우를 모두 고려해주어야 한다는 점이고 또 보드의 범위를 준수해야 한다는 점이다.

- 4중 for문의 내용을 직접 손으로 디버깅하면서 이해를 했는데 else문에서는 조건문을 뒤집어서 해야 한다. 

 

 

풀이는 다른 분의 블로그를 참고했다.

https://god-gil.tistory.com/62

 

[백준 알고리즘/python] 백준 1018번 체스판 다시 칠하기, 파이썬 설명

백준 알고리즘의 브루트 포스 단계, 1018번 체스판 다시 칠하기를 파이썬으로 풀어보았다. 문제 출처 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8

god-gil.tistory.com

 

728x90
반응형
Comments