상세 컨텐츠

본문 제목

체스판 다시 칠하기(백준)

코딩테스트

by dofury 2023. 6. 30. 12:28

본문

728x90

n, m = map(int, input().split())

board = []
result = []
for _ in range(n):
    board.append(input())

for i in range(n - 7):
    for j in range(m - 7):

        draw_type1 = 0  # 시작이 블랙
        draw_type2 = 0  # 시작이 화이트

        for a in range(i, i + 8): ## 8x8 보드 추출
            for b in range(j, j + 8):

                if (a + b) % 2 == 0: #a,b는 0부터 시작하는 인덱스 이므로 홀수칸을 의미
                    if board[a][b] != 'B':
                        draw_type1 += 1
                    else:
                        draw_type2 += 1

                else:# 짝수칸
                    if board[a][b] != 'W':
                        draw_type1 += 1
                    else:
                        draw_type2 += 1

        result.append(draw_type1)
        result.append(draw_type2)

print(min(result))#제일 작은 결과

해당 난이도에 비해 어려운 문제 였다고 생각한다.

문제의 핵심은 n x m보드를 8x8 보드로 쪼갤 수 있는 경우의 수를 다 고려하여 계산하는 것 이다.

쪼개고 나면 처음에 블랙칸인경우와 화이트칸 인경우 두가지 경우를 고려해서 한번에 두개의 결과를 구해준다.

그 중 가장 최소값을 출력하는 되는것이다.

728x90

'코딩테스트' 카테고리의 다른 글

프린터 큐(백준)  (0) 2023.07.04
수 찾기(백준)  (0) 2023.07.03
ACM 호텔(백준)  (0) 2023.06.29
음계(백준)  (0) 2023.06.29
OX퀴즈(백준)  (0) 2023.06.29

관련글 더보기

댓글 영역