본문 바로가기

algorithm

1018 체스판 다시 칠하기

문제 :  주어진 판을 올바른 체스판으로 만들기 위해서 다시 색을 칠해야하는 칸의 개수의 최솟값을 구하라

 

해결 :

최솟값 -> 경우가 여러가지가 있는데 그 중에서 최소인 경우를 찾아라

8*8체스판 + 시간 2초나 주어졌다?? -> 브루트포스를 이용해볼까? (사실 이미 분류에서 찾아서 들어온거긴 한데..ㅋ)

색깔이 행마다 반복이 될텐데 (BW + WB) or (WB + BW) 이 두 가지 경우뿐이다.

아 근데 8*8로 잘라서 하라고? 

n,m ( n,m >= 8) 

(n - 8 + 1)(m - 8 + 1) 만큼 확인하면 되겠다!

 

코드:

#include <iostream>

using namespace std;
char board[100][100];

int checkBoard(int r, int c){
    int ans1 = 0, ans2 = 0;
    for(int i = r ; i < r+8; i+=2){
        for(int j = c; j < c+8; j+=2){
            board[i][j] == 'B' ? ans2++ : ans1++;
            board[i][j+1] == 'W' ? ans2++ : ans1++;
            board[i+1][j] == 'B' ? ans1++ : ans2++;
            board[i+1][j+1] == 'W' ? ans1++ : ans2++;
        }
    }
    return min(ans1,ans2);
}

int main()
{
    int n,m; 
    int ans = 2510;
    cin>>n>>m;

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cin>>board[i][j];
        }
    }
    for(int i = 0 ; i < n - 8 + 1; i++){
        for(int j = 0; j < m - 8 + 1; j++){
            ans = min(ans,checkBoard(i,j));
        }
    }
    cout<<ans;
    return 0;
}

'algorithm' 카테고리의 다른 글

14391 종이조각  (0) 2023.01.10
Six Degrees of Kevin Bacon  (0) 2023.01.09
[Codeforces] suffix array  (0) 2022.10.10
[BOJ 9660] 돌 게임 6  (0) 2022.10.08
[BOJ] 2467용액  (0) 2022.08.27