-
해당 문제는 한번 그냥 문제만 확인하고 건너뛰었다가 다시 해보자 하여 해결한 문제다.
https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%201018
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
N*M 크기의 보드에 각각 흰색 또는 검은색으로 색칠되어 있을 때 이 보드를 8*8크기로 잘라서 체스판을 만들고자 할 때 최소로 색칠해야 하는 수를 찾는 문제이다.
조건
체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 하고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다.
먼저 처음 보드의 값을 입력받으면 해당 값을 블랙은 1 화이트는 0으로 변환하여 배열에 저장을 해두고 왼쪽위가 흰색인 버전과 검은색인 버전의 2가지 비교 데이터를 만들어 둔다.
이후 N*M크기의 보드에서 비교 데이터를 비교하여 다른값을 카운트해주어 최소 값을 출력해준다.
이때 비교 방법으로 먼저 자른 배열 시작위치를 파악해야 한다.
위의 그림을 보면 주황색 부분에서 시작할 경우 조건을 만족하는 것을 볼 수 있고 결국 시작 위치는 0,0부터 N-7, M-7이 된다.
이제 4중 포문을 통해 데이터를 비교해 주는데 총 포문이 N-7, M-7, 8, 8 만큼 반복하도록 지정하여 주고 a[k + i][z + j] != b[k][z] 이와 같이 비교하여 다른 경우를 카운트하여 최솟값을 출력하면 문제를 해결할 수 있다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1010 다리 놓기 JAVA (0) 2021.11.04 Baekjoon 1094 막대기 JAVA (0) 2021.11.04 Baekjoon 1063 킹 JAVA (0) 2021.11.04 Baekjoon 1059 수2 JAVA (0) 2021.11.04 Baekjoon 10866 덱 JAVA (0) 2021.11.04 댓글