티스토리 뷰

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

 

 

👩‍💻문제 이해

브루트포스 알고리즘을 이용해 주어진 배열을 모두 돌며 다시 칠해야하는 부분을 카운트하고 최소값을 찾는다.

맨 위 왼쪽 체스판이 흰색인 경우, 검은색인 경우로 나누어 다시 칠해야 하는 수를 확인 해야한다.

 

 

 

👩‍💻반복문을 사용해 모든 경우 체크  : 성공🌈

n, m=map(int,input().split())
# n행, m열

arr = []
cnt=[]
for i in range(n):
    arr.append(input())
    
for a in range(n-7):
    for b in range(m-7):
      # n-7, m- 7 : 8*8로 자르기 위해
        w_index = 0 # 흰색으로 시작
        b_index = 0 # 검은색으로 시작
        for i in range(a, a+8):
            for j in range(b,b+8):
                if (i+j)%2==0:
                  # 짝수인 경우, 첫 번째 값과 같아야함
                    if arr[i][j]!='W':
                      # W가 아니면
                        w_index+=1
                        # W로 칠하는 갯수
                    else:# W일 때
                        b_index+=1
                        # B로 칠하는 갯수
                else:
                  # 홀수인 경우, 첫 번째 값과 달라야 함
                    if arr[i][j]!='W':
                      # W가 아니면
                        b_index+=1
                        # B로 칠하는 갯수
                    else:
                        w_index+=1
                        # W로 칠하는 갯수
                        
        cnt.append(w_index) # W로 시작할 때 경우의 수
        cnt.append(b_index) # B로 시작할 때 경우의 수
print(min(cnt))

 

 

 

댓글
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday