백준 - 단계별 문제풀기(2231번)

유다송·2022년 9월 28일
0

N, M = map(int, input().split())
original = [] # 자르기 전
count = [] # 자른 후

for _ in range(N):
    original.append(input())

for a in range(N-7): # a는 행
    for b in range(M-7): b는 열
        index1 = 0 # w로 시작할 경우
        index2 = 0 # b로 시작할 경우
        for i in range(a, a+8):
            for j in range(b, b+8):
                if (i+j) % 2 == 0:
                    if original[i][j] != 'W':
                        index1 += 1 # w로 칠하는 갯수
                    if original[i][j] != 'B':
                        index2 += 1 # b로 칠하는 갯수
                else:
                    if original[i][j] != 'B':
                        index1 += 1 # b로 칠하는 갯수
                    if original[i][j] != 'W':
                        index2 += 1 # w로 칠하는 갯수
        count.append(min(index1, index2))

print(min(count))
  • 조건 1 : 8 × 8으로 잘라내야 한다.

  • 조건 2 : W, B가 번갈아서 나와야 한다.

  • 조건 3 : 최소로 바꿔야 한다.

  • 4중 for문을 사용해서 모든 경우의 수를 따져봐야 한다.

  • N × M 보드에서 자를 수 있는 경우의 수는 (N-i) × (M-j) 가지가 된다.

  • 행과 열의 인덱스의 합이 짝수인경우, 일정한 한 색을 가지게 되고, 홀수인 경우에도, 다른 일정한 한 색을 가지게 된다.

0개의 댓글