728x90
문제를 간단히 설명하면, M x N 크기의 보드가 주어졌을 때, 체스판처럼 칠해진 부분과 다른 색으로 칠해진 부분을 반복해서 칠해야 할 때, 다시 칠해야 하는 정사각형의 최소 개수를 구하는 문제입니다.
문제를 풀면 아래 코드가 나옵니다.
#include <stdio.h>
#include <stdlib.h>
char board[50][50];
int check_board(int row, int col) {
int i, j, count1 = 0, count2 = 0;
char color1 = 'W', color2 = 'B';
// (row, col)이 W로 시작하는 체스판과 비교
for (i = row; i < row + 8; i++) {
for (j = col; j < col + 8; j++) {
if (board[i][j] != color1) {
count1++;
}
color1 = (color1 == 'W') ? 'B' : 'W';
}
color1 = (color1 == 'W') ? 'B' : 'W';
}
// (row, col)이 B로 시작하는 체스판과 비교
for (i = row; i < row + 8; i++) {
for (j = col; j < col + 8; j++) {
if (board[i][j] != color2) {
count2++;
}
color2 = (color2 == 'W') ? 'B' : 'W';
}
color2 = (color2 == 'W') ? 'B' : 'W';
}
return (count1 < count2) ? count1 : count2;
}
int main() {
int N, M, i, j, ans = 2500;
scanf("%d %d", &N, &M);
for (i = 0; i < N; i++) {
scanf("%s", board[i]);
}
for (i = 0; i < N - 7; i++) {
for (j = 0; j < M - 7; j++) {
int count = check_board(i, j);
if (count < ans) {
ans = count;
}
}
}
printf("%d\n", ans);
return 0;
}
위 코드에서 board는 보드를 나타내는 이차원 배열입니다. check_board 함수는 (row, col)부터 시작하는 체스판을 W로 시작하는 체스판과 B로 시작하는 체스판 중에서 최소로 다시 칠해야 하는 정사각형의 수를 반환하는 함수입니다.
728x90
'백준 문제 풀이 > c언어' 카테고리의 다른 글
백준 1157 C언어 문제 풀이 - 단어 공부 (0) | 2024.01.28 |
---|---|
백준 1152 C언어 문제 풀이 - 단어의 개수 (0) | 2024.01.28 |
백준 1008 C언어 문제 풀이 - A/B (0) | 2024.01.28 |
백준 1001 C언어 문제 풀이 - A-B (1) | 2024.01.26 |
백준 1000 C언어 문제 풀이 - A+B (0) | 2024.01.26 |