문제 : 주어진 판을 올바른 체스판으로 만들기 위해서 다시 색을 칠해야하는 칸의 개수의 최솟값을 구하라
해결 :
최솟값 -> 경우가 여러가지가 있는데 그 중에서 최소인 경우를 찾아라
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 |