728x90

체스판 다시 칠하기

# 1018
W = [['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W']]
B = [['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],
     ['B','W','B','W','B','W','B','W'],
     ['W','B','W','B','W','B','W','B'],]

N, M = map(int,input().split())
arr = []
for i in range(N):
    arr.append(list(input()))
    
def chess(x,y):
    wcnt = 0
    bcnt = 0
    if x + 8 <= N and y + 8 <= M:
        for i in range(8):
            for j in range(8):
                if arr[i+x][j+y] == W[i][j]:
                    wcnt += 1
                else:
                    bcnt += 1
    return R.append(max(wcnt,bcnt))
                      
R = []
for i in range(N):
    for j in range(M):
        chess(i,j)
print(64-max(R))

첫 칸이 흰색이거나 검은색인 두 가지 경우의 수만 있다고 해서 먼저 두 가지 케이스를 리스트로 

만들어놨다. 그리고 이 케이스를 입력받는 N*M에 한 칸씩 넘어가면서 대조해보고 수정할 값이 

가장 적은 것을 가져왔다.

리스트를 만들어서 대조하기 전에 ['W', 'B'] 나 ['B', 'W']같이 짧은 리스트로도 풀 수 있을 거 같은 

느낌이지만 어떻게 풀어야할지 생각이 안 나네 다음에 시도해봐야겠다.

728x90

'Algorithm' 카테고리의 다른 글

백준 1085 파이썬  (0) 2022.01.11
백준 7576 파이썬  (0) 2022.01.11
백준 10951 파이썬  (0) 2022.01.10
백준 10871 파이썬  (0) 2022.01.10
백준 10818 파이썬  (0) 2022.01.10

+ Recent posts