728x90
일일이 다 해보면 된다.
단순반복 노동은 한 번만 그 원리를 알면, 나머지는 정말 쉽다.
특히 반복할 때 컴퓨터는 절대 실수하지 않는다.
8x8의 크기의 filter로 체스판을 자르고 올바른 체스판으로 만들기 위해 뒤집어야할 횟수 중 최소가 되는 것을 고른다.
추가 테스트 케이스
9 9
WBWBWBWBB
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
#include <cstdio>
char a[52][52];
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i=0; i<n; i++){
char s[52];
scanf("%s", s);
for (int j=0; j<m; j++){
a[i][j] = s[j];
}
}
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
printf("%c ", a[i][j]);
}
printf("\n");
}
int ans = 987654321;
for (int i=0; i<n-7; i++){
for (int j=0; j<m-7; j++){
printf("%d %d\n", i, j);
char first_char = a[i][j];
int first_value = (i + j) % 2;
printf("%c %d\n", first_char, first_value);
int cnt = 0;
for (int k=i; k<i+8; k++){
for (int p=j; p<j+8; p++){
printf("%c ", a[k][p]);
}
printf("\n");
}
for (int k=i; k<i+8; k++){
for (int p=j; p<j+8; p++){
if ((k+p) % 2 == first_value){
if (a[k][p] != first_char) { cnt++; printf("%d %d, %c %c\n", k, p, first_char, a[k][p]); }
}
else if (a[k][p] == first_char) { cnt++; printf("%d %d, %c %c\n", k, p, first_char == 'B' ? 'W' : 'B', a[k][p]); }
}
}
if (cnt < ans) {
ans = cnt;
printf("answer(%d)\n", ans);
}
if (ans == 0) break;
}
if (ans == 0) break;
}
printf("%d\n", ans);
return 0;
}
왜 안되는지 디버깅을 위해 발악...
728x90
'알고리즘, 자료구조 > 알고리즘' 카테고리의 다른 글
1541 잃어버린 괄호 (0) | 2019.07.25 |
---|---|
1107 리모컨 (0) | 2019.07.21 |
[brute-force] 1436 영화감독 숌 (0) | 2019.07.16 |
[brute-force] 2798 블랙잭 (0) | 2019.07.15 |
17298 오큰수 (4) | 2019.07.14 |
댓글