낭만 IT

반응형

문제 주소

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

알고리즘

브루트 포스

힌트

정답 배열을 만들어 놓고 비교한다.

 

 

풀이

BW가 반복해서 나와야 하는데 B가 먼저 올 수 도 있고 W가 먼저올 수도 있다. 이것을 따로 계산해주면 복잡해서 W가 먼저 나온다고 가정을 하고 문제를 푼다. 이 때 색을 칠하는 개수64 - 색을 칠하는 개수중 더 작은 수가 색을 칠하는 최소 개수가 된다. 64 - 색을 칠하는 개수B가 먼저 나올 경우를 생각해 주는 것이다.

#include<iostream>
#include<string>
using namespace std; 
string in[50];
string chess[8]={"WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW","WBWBWBWB","BWBWBWBW"};
int main(){
    int n,m;
    cin>>n>>m;

    for(int i=0;i<n;i++){
        cin>>in[i];
    }
    //cout<<"d";
    int ans=64;
    for(int i=0;i<=n-8;i++){
        for(int j=0;j<=m-8;j++){
            int cnt=0;
            for(int k=i;k<i+8;k++){
                for(int l=j;l<j+8;l++){
                    if(in[k][l]!=chess[k-i][l-j])
                        cnt++;
                }
            }
            cnt=min(cnt,64-cnt);
            ans=min(ans,cnt);
        }
    }

    cout<<ans;
}

반응형

'Problem Solve > Brute Force' 카테고리의 다른 글

[백준] 1436번 영화감독 숌 (C)  (0) 2020.03.27
[백준] 7568번 덩치 (C)  (0) 2020.03.22
[백준] 2231번 분해합 (C)  (0) 2020.03.22
[백준] 2798번 블랙잭 (C)  (0) 2020.03.08

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band