[백준] 1018. 체스

채연·2023년 1월 13일
0

baekjoon

목록 보기
7/26

📖 문제 설명

  • 8*8의 체스판을 만들어야 한다(검정색과 흰색은 번갈아가면서 칠해져있다)
  • 보드에서 잘라낼 것인데, 보드의 어느 부분에서 잘라야 가장 적게 바뀔까

⌨️ 입력

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

🖥️ 출력

첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.

🦯 접근

입력 받은 보드를 미리 만든 후에, 8*8의 체스판과 얼마나 다른지 비교한다.

📄 코드

import sys

inputWord = []
N, M = map(int, input().split())

arr = []

for i in range(8):
    arr.append([])

    for j in range(8):
        if(i%2==0):
            if(j%2==0):
                arr[i].append('W')
            else:
                arr[i].append("B")
        else:
            if(j%2==0):
                arr[i].append("B")
            else:
                arr[i].append("W")   

# for i in range(8):         
#     print(arr[i])

# N이 행이고 M이 열이다.


for i in range(N):
    inputWord.append([])
    for j in sys.stdin.readline().rstrip():
        inputWord[i].append(j)

# for i in range(N):
#     print(inputWord[i])

count = []
countNum1 = 0
countNum2 = 0
for y in range(N-7): # 행 돌아감 
    for x in range(M-7): # 열 돌아감 13-7 => 6번
        for i in range(0+y, 8+y):
            for j in range(0+x, 8+x): # range(0, 8) 이면 0,1,2,3,4,5,6,7
                if(i<0): i=0
                if(j<0): j=0
                if(inputWord[i][j] != arr[i-y][j-x]):
                    countNum1 += 1
                if(inputWord[i][j] == arr[i-y][j-x]):
                    countNum2 += 1
        count.append(countNum1)
        count.append(countNum2)
        countNum1 = 0
        countNum2 = 0

        # print(str(y)+','+str(x))


# print(count)
print(min(count))

profile
Hello Velog

0개의 댓글