https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
문제에서 제시한 대로 브루트 포스 방식으로 해결하였다.
2차원 캐릭터 배열을 입력받은 후, check8x8 함수를 이용해
현재 행과 열을 시작 위치로 하는 8x8 배열에 대해 다시 칠해야 하는 색깔의 수를 계산한다.
정상적인 체스판에서, 대각선으로 이동할 수 있는 모든 정사각형의 색깔은 서로 같다.
또한 시작 위치 0,0에서 대각선으로 이동할 수 있으면 중첩 loop문에서 i+j가 짝수이며, 없으면 홀수이다.
check8x8 함수는 이 두 성질을 이용해 시작 위치의 색깔이 검은 색일때와 흰 색일 때의 2가지 경우로 나눠
다시 칠해야 하는 정사각형의 수를 계산하고, 둘 중 더 작은 값을 반환한다.
check8x8 함수는 현재 위치에서 오른쪽, 아래로 7칸까지 값이 존재해야 하므로
MxN 크기 배열에 대해 M-8, N-8까지 함수를 호출해 각각의 호출 결과 중 최소값을 구한다.
배운 점 : 2차원 배열 입력받기(까먹었음)
'백준' 카테고리의 다른 글
백준 2447 - 별 찍기 10 (0) | 2023.05.01 |
---|---|
백준 1010 - 다리 놓기 (0) | 2023.04.30 |
백준 1005 - ACM Craft (0) | 2023.04.30 |
백준 10814 - 나이순 정렬 (0) | 2023.04.27 |
백준 2630 - 색종이 만들기 (1) | 2023.03.22 |