본문 바로가기

Algorithm/Brute-force

[Python] 백준 1018번 : 체스판 다시 칠하기 (S5) - 브루트포스단계별4

#문제

www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

#풀이 & 학습한 내용

"체스판을 만드는 모든 경우를 시도하여 최적의 방법을 찾는 문제"입니다. 비교해야할 체스판은 시작점이 'W'인 경우와 'B'인 경우 2가지가 있는데, 둘 중 하나를 계산한 후, 8*8에서 빼주어 나머지 경우의 수를 구할 수 있습니다.

 

#소스코드(5,19번째 줄 주목)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
chess=[] #입력되는 체스판 저장할 리스트
N,M = map(int,input().split())
 
for i in range(N):
  c = list(input()) #★문자열에 list()씌워서 문자 분리
  chess.append(c)
 
minimum = (50*50/2+ 1
count = 0
for i in range(N-8+1):
  for j in range(M-8+1): #(i,j)가 시작점
    count = 0
    for ii in range(i,i+8):
      for jj in range(j,j+8):
        if (ii+jj)%2==0 and chess[ii][jj]=='W':
          count+=1
        if (ii+jj)%2!=0 and chess[ii][jj]=='B':
          count+=1
    count = min(count,8*8-count) #★다른경우는 전체에서 빼서 구한다
    if minimum > count:
      minimum = count
print(minimum)
cs

 

github.com/HoYoungChun/Algorithm_PS/blob/master/Brute-force/BOJ_1018.py

 

HoYoungChun/Algorithm_PS

Baekjoon Online Judge, Programmers problem solving by Python, C++ - HoYoungChun/Algorithm_PS

github.com