임의로 8*8 을 자르고 그 중 제일 색칠할칸이 적은 값을 출력
결국 1*1 도 정사각형이라 칸의 수를 출력하면됨
1. 8*8 정사각형으로 자르려면 최소 8칸은 남아 있어야함
남은게 8칸 미만일시 실행x ,
for (int i = 0; i <= N - 8; i++) {
for (int j = 0; j <= M - 8; j++) {
2. 자른 정사각형이 체스판형태가 아니라면 칠해야함
0 1 2 3 4 5 6 7 // 8칸
첫번째) 좌상단이 W 인경우 > 짝수 W, 홀수 B
// 첫번째 좌상단 W
if ((x + y) % 2 == 0) {
if (board[i + x][j + y] != 'W') paint1++;
} else {
if (board[i + x][j + y] != 'B') paint1++;
}
// 두번째 좌상단 B
if ((x + y) % 2 == 0) {
if (board[i + x][j + y] != 'B') paint2++;
} else {
if (board[i + x][j + y] != 'W') paint2++;
}
짝수가 Black 이면 W가 아니므로 칠해야 하므로 ++
홀수가 White 이면 B 가 아니므로 칠해줘야함 ++
두번째) 짝수가 B 일때 > paint 2 ++
int min_paint = 64; // 최대 색칠해야할 칸은 64칸, 초기값은 최대값으로 설정
if (paint1 < min_paint) min_paint = paint1;
if (paint2 < min_paint) min_paint = paint2;
각 8x8 영역에서 두 패턴(좌상단 W, 좌상단 B) 중 더 적게 색칠하는 패턴을 선택
> 그 중 최솟값을 min_paint에 저장
출력: min_paint
// 임의로 8*8 로 자르고 그안에서 제대로된 체스판 하나만 있다면 최솟값은 0 이 나옴
'C언어 > 백준' 카테고리의 다른 글
FIFO 메모리관리 (0) | 2024.11.24 |
---|---|
2789번, 2231번 (0) | 2024.11.23 |
5073번, 14215번 (0) | 2024.11.21 |
2581번, 11653번, 1085번, 3009번 (0) | 2024.11.20 |
2869번, 5086번, 2501번, 9506번, 1978번 (0) | 2024.11.19 |