fork download
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. int w, h;
  5. scanf("%d %d", &w, &h);
  6.  
  7. char arr[w][h+1];
  8.  
  9. for(int i = 0; i < w; i++){
  10. scanf("%s", &arr[i]);
  11. }
  12.  
  13. char bw[8][9];
  14. char wb[8][9];
  15. for(int i = 0; i < 8; i++){
  16. for(int j = 0; j < 8; j++){
  17. if(i % 2 == 0 && j % 2 == 0) { // 0 2 4 6(1,3,5,7)
  18. bw[i][j] == 'B';
  19. wb[i][j] == 'W';
  20. }
  21. else if(i % 2 == 0 && j % 2 == 1) {
  22. bw[i][j] == 'W';
  23. wb[i][j] == 'B';
  24. }
  25. else if(i % 2 == 1 && j % 2 == 0) {
  26. bw[i][j] == 'W';
  27. wb[i][j] == 'B';
  28. }
  29. else {
  30. bw[i][j] == 'B';
  31. wb[i][j] == 'W';
  32. }
  33. }
  34. } // 정의에 따라, 시작이 B인 체스판과 W인 체스판 배열을 만들었음.
  35. int bcount[(w-7)*(h-7)], wcount[(w-7)*(h-7)], p = 0; // 체스판과 판자를 비교했을때 몇 개가 다른지 비교함.
  36. for(int i = 0; i < w - 7; i++){
  37. for(int j = 0; j < h - 7; j++){
  38.  
  39. for(int k = 0; k < 8; k++){
  40. for(int l = 0; l < 8; l++){
  41. if(bw[k][l] != arr[k+i][l+j]) bcount[p]++;
  42. if(wb[k][l] != arr[k+i][l+j]) wcount[p]++;
  43. }
  44. }
  45. p++;
  46. }
  47.  
  48. } // 8*8을 기준으로 몇 개의 체스판이 수정되어야 하는지의 개수가 나왔을 것임.
  49.  
  50. int min = 2500;
  51.  
  52. for(int i = 0; i < (w-7)*(h-7)-1; i++){
  53. if(min > bcount[i] && bcount[i] >= 0) min = bcount[i];
  54. if(min > wcount[i] && wcount[i] >= 0) min = wcount[i];
  55. }
  56.  
  57. printf("%d", min);
  58. return 0;
  59. }
Success #stdin #stdout 0s 5508KB
stdin
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB
stdout
64