- [백준 알고리즘] 1018번 체스판 다시 칠하기 Python2021년 02월 16일
- 홀쑥
- 작성자
- 2021.02.16.:12
오늘은 백준에서 1018번문제 체스판 다시 칠하기를 풀어보았다.
MN개의 단위 정사각형으로 나뉜 M X N 크기의 보드가 있다.
정사각형들은 검은색 또는 흰색으로 칠해져있고, 이 보드를 잘라 8 X 8 크기의 체스판으로 만들어야 한다.
변을 공유하는 두개의 사각형은 다른 색으로 칠해져 있는, 즉 체스판은 검은색가 흰색이 번갈아서 칠해져 있어야 한다.
결국 체스판을 색칠하는 경우는 맨 왼쪽 위칸이 흰색 또는 검은색인 경우 두 가지로 나뉜다.
보드는 그런 형식이 지켜져있다는 보장이 없기에 보드를 8 * 8크기의 체스판으로 잘라 몇개의 정사각형을 다시 칠한다.
이 때 다시 칠해야 하는 정사각형의 최소 개수를 구하는 문제이다.
N과 M이 첫째 줄에 주어지고 8 <= N,M <= 50 이다.
둘째줄부터 N개의 줄에는 각 행의 상태가 주어진다. B는 검은색이고 W는 흰색이다.
예제 입력은 이렇다.
이 문제를 다른 생각 없이 그저 8*8 배열에서 첫 글자(기준색) 기준으로 최소 횟수를 구하다보니 문제를 틀렸다.
틀리고 다시 생각해보니 기준색일 때 뿐만 아니라 다른 색일 경우에도 최소 횟수를 구하고 그 둘을 비교해야 할 것 같았다.
import sys class Board: def __init__(self, N, M): self.row = N self.col = M self.board = [] def inputRow(self, row): self.board.append(row) def getLowerFix(self): min_fix = 50 * 50 for x in range(0,self.col - 7): for y in range(0,self.row - 7): sub_board = self.board[0+y:8+y] fix_cnt = 64 for color in ['B','W']: count = 0 for idx,row in enumerate(sub_board): sub_row = row[0+x:8+x] if idx % 2 == 0: count += len([col for col in sub_row[0:8:2] if col != color ]) count += len([col for col in sub_row[1:8:2] if col == color ]) else : count += len([col for col in sub_row[0:8:2] if col == color ]) count += len([col for col in sub_row[1:8:2] if col != color ]) if fix_cnt > count : fix_cnt = count if min_fix > fix_cnt : min_fix = fix_cnt print(min_fix) def getInput(): input_list = sys.stdin.readline().strip().split() N = int(input_list[0]) M = int(input_list[1]) board = Board(N, M) [ board.inputRow(sys.stdin.readline().strip()) for cnt in range(0,N) ] return board def main(): getInput().getLowerFix() if __name__ == '__main__': main()
다시 짠다면 보드의 한 줄을 입력 받을 때 마다 줄 당 최소 횟수를 구하는 방법으로 만들고 싶다.
'Algorithm & Data Structure > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 2231번 문제 분해합 구하기 Python (0) 2021.02.02 [백준 알고리즘] 2869번 달팽이는 올라가고 싶다 Java (0) 2020.06.15 [백준 알고리즘] 1193번 분수찾기 Java (0) 2020.06.15 [백준 알고리즘] 2839번 설탕 배달 Java (0) 2020.06.15 [백준 알고리즘] 1712번 손익 분기점 Java (0) 2020.06.15 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)