[백준] Python - 1018번: 체스판 다시 칠하기

·2023년 10월 16일
0

코테 풀기

목록 보기
21/26
post-thumbnail

1018번

문제 / 입력 / 출력

예제 입력 및 출력

문제 바로가기

백준 1018번


💡풀이 방법

.
1. n, m 값 입력받기
2. 길이 m으로 이루어져있는 문자열 B, W을 n개 입력받기
3. 각 입력받은 문자열 한 줄씩 검사

3-1. 만약 문자열이 'BBBBBBBBBWBW'로 이루어질 때, (1)보다 (2)가 더 문자열 바꿀 경우가 적기 때문에 (2)가 더 효율적이며 최솟값을 출력함

3-2. **체스판이 8X8이므로, 주어진 문자열 길이에 따라 검사 횟수가 달라짐**
ex) 문자열이 12일 경우, 총 검사하게 될 횟수는 5개
	(BBBBBBBB, BBBBBBBB,BBBBBBBW, BBBBBBWB, BBBBBWBW)

  1. i,j를 기준으로 (a,b)에서 a+b값이 짝수인 경우 같은 문자이고, 홀수인 경우 다른 문자이다.

💡구현 코드

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):
    	# 첫번째 문자열이 B인 경우와 W인 경우를 나눠서 검사
        first_B = 0
        first_W = 0

        for a in range(i, i + 8):
            for b in range(j, j + 8):
                if (a + b) % 2 == 0:
                    # i+j과 a+b의 값 차이가 짝수일 경우 같은 값을 가짐
                    if board[a][b] != 'B':
                        first_B += 1
                    if board[a][b] != 'W':
                        first_W += 1
                else:
                    if board[a][b] != 'W':
                        fi rst_B += 1
                    if board[a][b] != 'B':
                        first_W += 1

        result.append(first_B)
        result.append(first_W)

print(min(result))

0개의 댓글