본문 바로가기
C/중간고사 대비 (2022 1학기)

[C백준] 실버 5/ 1018번 체스판 다시 칠하기

by Meaning_ 2022. 3. 20.
728x90
반응형

 

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

 

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
#include <string.h>
#include<stdbool.h>
 
 
 
static int n, m;
 
char arr[51][51];
 
 
//W로 시작하는 애랑 B로 시작하는 arr을 만들고 다른거 비교
//둘 중 min인걸 출력
char Warr[51][51];
char Barr[51][51];
 
 
 
 
 
 
 
int main() {
    
    
 
 
    //Warr
    for (int i = 0; i < 51; i++) {
        for (int j = 0; j < 51; j++) {
            if (i % 2 == 0) {
                if (j % 2 == 0) {
                    Warr[i][j] = 'W';
                }
                else {
                    Warr[i][j] = 'B';
                }
            }
            else {
                if (j % 2 == 0) {
                    Warr[i][j] = 'B';
                    
                }
                else {
                    Warr[i][j] = 'W';
                }
            }
        }
    }
 
    //Barr
 
    for (int i = 0; i < 51; i++) {
        for (int j = 0; j < 51; j++) {
            if (i % 2 == 0) {
                if (j % 2 == 0) {
                    Barr[i][j] = 'B';
                }
                else {
                    Barr[i][j] = 'W';
                }
            }
            else {
                if (j % 2 == 0) {
                    Barr[i][j] = 'W';
 
                }
                else {
                    Barr[i][j] = 'B';
                }
            }
        }
    }
 
    
    scanf("%d"&n);
    scanf("%d"&m);
    
    for (int i = 0; i < n; i++) {
        scanf("%s"&arr[i]);
    }
    
    int minNum = 1000000;
    
 
    for (int i = 0; i < n-7; i++) {
        for (int j = 0; j < m-7; j++) {
            int compareW = 0;
            int compareB = 0;
            int num = 0;
            
            for (int a = i; a < i + 8; a++) {
                for (int b = j; b < j + 8; b++) {
                    if (arr[a][b] != Warr[a][b]) {
                        compareW++;
                    }
                    else if (arr[a][b] != Barr[a][b]) {
                        compareB++;
                    }
                }
            }
 
            if (compareW < compareB) {
                num = compareW;
            }
            else if(compareB<=compareW){
                num=compareB;
            }
 
            if (num < minNum) {
                minNum = num;
            }
        }
    }
    
 
    printf("%d",minNum);
    
    
    
    
}
 
cs

 

말그대로 브루트포스이다.

W로 시작하는 배열 51행51열(-->이게 최대 크기임)

B로 시작하는 배열 51행 51열만들어줘서 하나하나다 비교해주면 된다.

 

 

728x90
반응형

댓글