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

Sujin Lee·2022년 8월 22일
0

코딩테스트

목록 보기
107/172
post-thumbnail

문제

백준 1018번 - 체스판 다시 칠하기

해결과정

  • 가능한 모든 경우의 수를 확인하는 문제
  • 우선 체스 판을 8*8로 잘라서 확인해야한다.
  • 시작점에서 +8칸을 확인하는데
    현재의 행과 열의 합이 짝수이면 시작점의 색깔과 같고
    홀수이면 시작점의 색깔과 다르다
  • 짝수일 때 W가 아니라면 cnt_w에 1을 더하고, B가 아니라면 cnt_b에 1을 더한다.
    홀수일 때 B가 아니라면 cnt_w에 1을 더하고, W가 아니라면 cnt_b에 1을 더한다.
  • w로 시작할 경우와 b로 시작할 경우 바뀐 정사각형의 수 중 작은 수를 count리스트에 더해준다.
  • 모든 경우의 수를 다 체크한 후, count 중 제일 작은 수를 출력

풀이

import sys

n, m = map(int, sys.stdin.readline().split())
board = []
count =[]
for _ in range(n):
    board.append(sys.stdin.readline().strip())

# 전체 체스판에서의 시작점 x,y
for x in range(n-7):
  for y in range(m-7):
    # W로 시작할 경우 바뀐 정사각형의 갯수
    cnt_w = 0
    # B로 시작할 경우 바뀐 정사각형의 갯수
    cnt_b = 0
    # a,b를 시작점으로 8칸씩 체크
    for i in range(x,x+8):
      for j in range(y,y+8):
        # i와 j의 합이 짝수 -> 시작점과 같은 색깔
        if (i+j) % 2 == 0:
          if board[i][j] != "W":
            cnt_w += 1
          if board[i][j] != "B":
            cnt_b += 1
        # i와 j의 합이 홀수 -> 시작점과 다른 색깔
        else:
          if board[i][j] != "B":
            cnt_w += 1
          if board[i][j] != "W":
            cnt_b += 1
    count.append(min(cnt_w, cnt_b))
print(min(count))
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글