JiSoo's Devlog

[백준 / 파이썬] 1018번 체스판 다시 칠하기 본문

코테준비

[백준 / 파이썬] 1018번 체스판 다시 칠하기

지숭숭숭 2024. 1. 12. 13:17

n, m = map(int, input().split())
a = []
for i in range(n):
    a.append(input())

s=[]
for i in range(n-7):
    for j in range(m-7):
        fw = 0
        fb = 0
        for k in range(i, i+8):
            for l in range(j, j+8):
                if (k+l) % 2 == 0:
                    if a[k][l] != 'W':
                        fw += 1
                    if a[k][l] != 'B':
                        fb += 1
                else:
                    if a[k][l] != 'B':
                        fw += 1
                    if a[k][l] != 'W':
                        fb += 1
        s.append(fw)
        s.append(fb)
print(min(s))

 

8*8로 잘라야 되기 때문에 행을 i-7, 열을 j-7로 고정시켜줘야 한다

중첩 for문으로 i와 j의 최대 크기 조절

(k + l ) % 2 == 0는 행과 열의 인덱스의 합이 짝수일 때 일정한 색, 홀수일 때 일정한 한 색을 가지기 때문이다

0,0(짝) 0,1(홀) 0,2(짝) 0,3(홀)
1,0(홀) 1,1(짝) 1,2(홀) 1,3(짝)
2,0(짝) 2,1(홀) 2,2(짝) 2,3(홀)
3,0(홀) 3,1(짝) 3,2(홀) 3,3(짝)

이런 식으로 인덱스의 합이 짝수인지 홀수인지로 체크무늬 판단 가능

 

728x90