https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
(21.11.13)
1018번: 체스판 다시 칠하기 - C언어 풀이
[소스코드]
#include <stdio.h>
// [baekjoon] 1018번 - 체스판 다시 칠하기
int main(void) {
char ar[51][51] = { 0 };
int n, m;
scanf("%d %d", &n, &m);
getchar();
//체스판 입력
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%c", &ar[i][j]);
}
getchar();
}
//체스판 계산
int min_cnt = n * m;
for (int a = 0; a + 7 < n; a++) {
for (int b = 0; b + 7 < m; b++) {
//해당 위치부터 8*8만큼의 체스판을 살펴봄
char tmp;
int cnt1 = 0; // 'B'로 시작하는 체스판일때 다시 칠해야 하는 개수
int cnt2 = 0; // 'W'로 시작하는 체스판일때 다시 칠해야 하는 개수
for (int i = a; i < a + 8; i++) {
if (i % 2 == a % 2) {
tmp = 'B';
}
else {
tmp = 'W';
}
for (int j = b; j < b + 8; j++) {
if (ar[i][j] != tmp)cnt1++;
else cnt2++;
if (tmp == 'W')tmp = 'B';
else tmp = 'W';
}
}
int mcnt = cnt1;
if (mcnt > cnt2) mcnt = cnt2; // 둘중 작은 값을 mcnt에 저장
if (min_cnt > mcnt) min_cnt = mcnt;
}
}
printf("%d", min_cnt);
return 0;
}
문제가 조금 복잡하긴 한데, 예제 입출력이 많아서 수월하게 풀 수 있었다.
'학습 정리 > 👨💻 PS Study' 카테고리의 다른 글
[C++] 백준 15552번 - 빠른 A+B (2) | 2023.01.04 |
---|---|
[C] 백준 4884번 - FIFA 월드컵 (0) | 2022.07.09 |
[C] 백준 16926번 - 배열 돌리기1 (0) | 2022.07.09 |
[C] 백준 1100번 - 하얀 칸 (0) | 2022.07.09 |
[C] 백준 1759번 - 암호 만들기 (0) | 2022.07.08 |