티스토리 뷰

PS

백준 1018. 체스판 다시 칠하기

tose33 2021. 5. 11. 20:18

www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

첫번째 칸이 B인 경우와, 첫번째 칸이 W인 경우로 나눠서 생각한다.

첫칸이 B인 경우를 생각해보면

첫칸 : 0,0 : B

 0,1 : W

 0,2 : B

 1,1 : B

보면 행인덱스+열인덱스가 짝수면 B여야하고 홀수면 W여아 한다는것을 알수있다.

 

첫칸이 W인 경우는 반대로 행+열이 짝수면 W여야하고 홀수면 B여야 할것이다.

 

1. 전체 체스 판에서 8x8크기 만큼을 돌면서 

 

2. 첫칸 B기준, 행+열이 짝수인데 B가아니면 cntB를 증가시키고

홀수인데 W가 아니면 cntB를 증가시킨다.

 

3. 첫칸 W기준, 행+열 짝수인데 W아니면 cntW 증가

홀수인데 B아니면 cntW 증가

 

4. 둘중 작은값을 기억한다

 

#include <iostream>
using namespace std;
#include <algorithm>

int main() {
    char board[50][50];
    int N,M;
    int ans = 100;
    int cntB = 0, cntW = 0;

    cin >> N >> M;
    for(int i = 0; i < N; i++) {
        scanf("%s", &board[i]);
    }

    for(int i = 0; i < N-7; i++) {
        for(int j = 0; j < M-7; j++) {
            cntB = 0; // 첫칸이 B기준 바꿔야하는 판의 수
            cntW = 0; // 첫칸이 W기준 바꿔야하는 판의 수

            for(int a = i; a < i + 8; a++) {
                for(int b = j; b < j + 8; b++) {
                    // 첫칸 B 기준
                    if((a+b) % 2 == 0) {
                        if(board[a][b] == 'W') // 첫칸 B여야하는데 W라면
                            cntB++; // cntB 증가

                    }
                    else {
                        if(board[a][b] == 'B') // 두번째칸 W여야하는데 B라면
                            cntB++;
                    }

                    // 첫칸 W 기준
                    if((a+b)%2==0) {
                        if(board[a][b] == 'B') // 첫칸 W여야하는데 B라면
                            cntW++;
                    }
                    else {
                        if(board[a][b] == 'W') // 두번째칸 B여야하는데 W라면
                            cntW++;
                    }
                }
            }
            // 최솟값 갱신
            ans = min(ans, cntB);
            ans = min(ans, cntW);

        }
    }
    cout << ans;
}

'PS' 카테고리의 다른 글

백준 14501. 퇴사  (0) 2021.05.13
백준 1436. 영화감독 숌  (0) 2021.05.11
백준 7568. 덩치  (0) 2021.04.30
백준 2231. 분해합  (0) 2021.04.30
백준 9095. 1,2,3 더하기  (0) 2021.04.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함