코딩공작소

[백준]체스판다시칠하기 본문

알고리즘/그리디&완탐

[백준]체스판다시칠하기

안잡아모찌 2019. 8. 6. 21:45

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. M과 N은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개 줄에는 체스판의 색 상태가 주어진다. B는 검정색이며, W는 흰색이다.

www.acmicpc.net

 

흠.. 간만에 적응 안되는 쉬운문제였다.

시뮬?? 그리디?? 그냥 세우면 됐다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
using namespace std;
 
/*
1.8x8의 격자판을 만들어야한다. 
2.8x8을 완전 탐색으로 선택해서 왼쪽 위를 기준으로 몇개를 칠해야되는지 전부 따진다.
*/
 
char white[8][8= {
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
};
char black[8][8= {
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'},
    {'B','W','B','W','B','W','B','W'},
    {'W','B','W','B','W','B','W','B'}
};
char map[50][50];
int N, M;
int ans = 1e9;
 
int main()
{    
    cin >> N >> M;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cin >> map[i][j];
        }
    }
    
    for (int r = 0; r <= N-8; r++) {
        for (int c = 0; c <= M-8; c++) {
            //각 점들마다
            int cnt1 = 0, cnt2 = 0;
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    if (map[i + r][j + c] != white[i][j]) cnt1++;
                    if (map[i + r][j + c] != black[i][j]) cnt2++;
                }
            }
            //printf("white : %d black : %d\n", cnt1, cnt2);
            int tmp;
            if (cnt2 >= cnt1) tmp = cnt1;
            else tmp = cnt2;
            if (ans >= tmp) ans = tmp;
        }
    }
    printf("%d\n", ans);
    return 0;
}
cs