< [C++/백준 1018번] 체스판 다시 칠하기

프로그래밍 공부/백준 (C++)

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

Rocketbabydolls 2023. 8. 4. 20:24

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

해결 방법

   네 가지 경우가 있다.

  1.  (0,0) 이 B로 시작하고 현재 인덱스의 원소가 B인경우
  2.  (0,0) 이 B로 시작하고 현재 인덱스의 원소가 W인경우
  3.  (0,0) 이 W로 시작하고 현재 인덱스가 B인경우
  4.  (0,0) 이 W로 시작하고 현재 인덱스가 W인경우

이 네 가지 경우를 잘 생각해서 전부 세어주면 된다. Climits 헤더의 INT_MAX 를 사용하여 min 변수의 초기값을 설정해 주었다.

 

#include <iostream>
#include <stack>
#include <string>
#include <climits>
using namespace std;
int main()
{
    int N, M;
    
    char chess[50][50];
    cin >> N >> M;

    char input;
    for(int y = 0 ; y < N ; y++)
    {
        for(int x = 0 ; x < M; x++)
        {
            cin >> input;
            chess[y][x] = input;
        }
    }

    int min = INT_MAX;

    for(int y = 0 ; y < N; y++)
    { 
        for(int x = 0 ; x < M; x++)
        {
            if(y > N-8 || x > M-8) 
                continue;

            int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
            int sum = 0;

                for(int Y = y; Y < y + 8; Y++)
                {
                    for(int X = x; X < x + 8; X++)
                        {
                            if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'W')
                                        cnt1++;
                            if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'B')
                                        cnt2++;

                            if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'B')
                                        cnt3++;
                            if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'W')
                                        cnt4++;
                     
                        }
                } 

                sum = cnt1 + cnt2 < cnt3 + cnt4 ? cnt1+cnt2 : cnt3+ cnt4;

                if (sum < min)
                    min = sum;
        }
    }

        cout << min;

    return 0;
}