티스토리 뷰

BOJ 1018번 체스판 다시 칠하기


브루트 포스, 시뮬레이션


- (0,0)이 'W' 로 시작하는 경우와 'B'로 시작하는 경우로 나눈다.


1번째 경우 : 짝수행의 짝수열에 'W' 홀수열에 'B'가, 홀수행의 짝수열에 'B', 홀수열에 'W'


2번째 경우 : 짝수행의 짝수열에 'B' 홀수열에 'W'가, 홀수행의 짝수열에 'W', 홀수열에 'B'



1번째 경우에 맞는 위치에 있으면 W1, B1 1씩 증가시키고


2번째 경우에 맞는 위치에 있으면 W2, B2 1씩 증가시킨다.


W1 + B1 와 W2 + B2 의 값을 비교해 더 작은 값을 답으로 갱신한다.



*190322

생각해보니 그냥 W1, B1, W2, B2 나누지 않고 


1번째 경우 a++, 2번째 경우 b++ 한 후 min(a,b) 하면 된다 ㅎ ㅎ;;


설명 시작


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
#include <iostream>
#include <algorithm>
#define FOR(i,a,b) for(int i = a; i < b; i++)
#define MAX 2147000000
using namespace std;
char arr[51][51];
int main() {
    int N, M, ans = MAX;
    cin >> N >> M;
    FOR(i, 0, N) FOR(j, 0, M) cin >> arr[i][j];
    FOR(x, 0, N - 7) FOR(y, 0, M - 7) {
        int W1 = 0, W2 = 0, B1 = 0, B2 = 0;
        FOR(i, x, x + 8) {
            if (i % 2 == 0) {
                FOR(j, y, y + 8) {
                    if (j % 2 == 0 && arr[i][j] == 'W') W1++;
                    else if (j % 2 == 1 && arr[i][j] == 'B') B1++;
                    else if (j % 2 == 0 && arr[i][j] == 'B') B2++;
                    else W2++;
                }
            }
            else {
                FOR(j, y, y + 8) {
                    if (j % 2 == 0 && arr[i][j] == 'B') B1++;
                    else if (j % 2 == 1 && arr[i][j] == 'W') W1++;
                    else if (j % 2 == 0 && arr[i][j] == 'W') W2++;
                    else B2++;
                }
            }
        }
        ans = min(ans, min(W1 + B1, W2 + B2));
    }
    cout << ans;
}
cs



반응형

'백준 온라인 저지' 카테고리의 다른 글

190205 BOJ 2094번 강수량  (0) 2019.03.17
190316 BOJ 1992번 쿼드트리  (0) 2019.03.16
190305 BOJ 9370번 미확인 도착지  (0) 2019.03.05
190301 BOJ 16985번 Maaaaaaaaaze  (0) 2019.03.02
190224 BOJ 1406번 에디터  (0) 2019.02.25
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
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
글 보관함