본문 바로가기

하루하나코딩

백준 1018 : 체스판 다시 칠하기 c++

코드

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;


int M, N;

string WB[8] = {
	"WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW"
};

string BW[8] = {
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB"
};

string board[50];

int WB_cnt(int a, int b){
	int cnt = 0;
	for(int i = 0; i < 8; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if(board[a+i][b+j] != WB[i][j])
                cnt++;
        }
    }
	
	return cnt;
}

int BW_cnt(int a, int b){
	int cnt = 0;
	for(int i = 0; i < 8; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if(board[a+i][b+j] != BW[i][j])
                cnt++;
        }
    }
	
	return cnt;
}

int main(){
	
	cin >> M >> N;
	
	for(int i = 0; i < M; i++){
			cin >> board[i];
	}
	
	int temp;
	int minn = 99999;
	
	for(int i = 0; i < M-7; i++){
		for(int j = 0; j < N-7; j++){
			temp = min(BW_cnt(i,j), WB_cnt(i,j));
			if(temp < minn) minn = temp;
		}
	}
	
	cout << minn;
	
	return 0;
}

알게된 점

숫자가 작아서 브루트포스구나했는데,

어떻게 8*8에서 바꿔야하는 체스의 개수를 구하는지를 모르겠었다.

근데 정답인 체스판 두개를 설정하고

그걸 갖다 대서 틀린걸 확인하는 식으로 했다.

'하루하나코딩' 카테고리의 다른 글

백준 1259 : 팰린드롬수 c++  (0) 2023.03.29
백준 1085 : 직사각형에서 탈출  (0) 2023.03.28
Github 업로드 시작  (0) 2023.03.28
백준 1759 : 암호만들기 c++  (0) 2023.03.06
백준 14501 : 퇴사 c++  (0) 2023.03.06