728x90
반응형
문제 원본: https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
풀이: 처음에는 왼쪽 위가 각각 다르게 시작하는 8x8 짜리 배열을 직접 전역변수로 선언해서 한 원소 한 원소 비교하려 했다. 그러나 분류가 브루트 포스로 되어있는 데다가, 아무리 그래도 이렇게 무식하게 풀 순 없을 것 같았다.
어차피 원소 비교는 B, W 두 개만 비교하면 되기 때문에 1차원 배열에 B, W만 넣어서 두 경우의 체스판에 대해 모두 점검할 수 있게끔 했다.
소스코드:
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;
int Check(const vector<string>& v, int x, int y){
char BW[2] = {'B', 'W'};
int minChange = numeric_limits<int>::max();
for(int T = 0; T < 2; T++){
int cnt = 0;
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
if(v[x + i][y + j] != BW[(i + j + T) % 2]) cnt++;
}
}
minChange = min(minChange, cnt);
}
return minChange;
}
int main(){
int N, M;
cin >> N >> M;
vector<string> board(N);
for(int i = 0; i < N; i++) cin >> board[i];
int ans = numeric_limits<int>::max();
for(int i = 0; i <= N - 8; i++){
for(int j = 0; j <= M - 8; j++){
ans = min(ans, Check(board, i, j));
}
}
cout << ans << endl;
return 0;
}
728x90
반응형
'부업 > BOJ' 카테고리의 다른 글
[BOJ/C++] 2839번, 설탕 배달 (3) | 2024.02.05 |
---|---|
[BOJ/C++] 1436번, 영화감독 숌 (0) | 2024.02.05 |
[BOJ/C++] 24313번, 알고리즘 수업 - 점근적 표기 1 (2) | 2024.01.28 |
[BOJ/C++] 1193번, 분수 찾기 (2) | 2024.01.24 |