문제
리뷰
주어진 체스판을 WBWB 패턴의 8 x 8 크기의 체스판, 또는 BWBW 패턴으로 바꾸려고 한다.
이미 목표한 2종류 패턴의 체스판을 string 배열로 만들어 둔다.
string B[51]; // 보드 ( 가로 세로는 최대 50보다 작거나 같다.)
string W_pattern[8] = {
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"}
};
string B_pattern[8] = {
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"}
};
주어진 보드의 시작점을 달리하면서
시작점에서 W_pattern이랑 다른 칸의 개수를 세고, B_pattern이랑 다른 칸의 개수를 센다.
for(int i = 0; i+7 < N; i++){
for(int j = 0; j+7 < M; j++){
min_cnt = min(min_cnt, Bcheck(i, j) );
min_cnt = min(min_cnt, Wcheck(i, j) );
}
}
맞은 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int N, M; // 세로, 가로
string B[51]; // 보드
int min_cnt = 2e9;
string W_pattern[8] = {
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"}
};
string B_pattern[8] = {
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"}
};
int Wcheck(int x, int y){
int n_limit = x+8;
int m_limit = y+8;
int cnt = 0;
for(int i = x; i < n_limit; i++){
for(int j = y; j < m_limit; j++){
if(B[i][j] != W_pattern[i-x][j-y] ) cnt++;
}
}
return cnt;
}
int Bcheck(int x, int y){
int n_limit = x+8;
int m_limit = y+8;
int cnt = 0;
for(int i = x; i < n_limit; i++){
for(int j = y; j < m_limit; j++){
if(B[i][j] != B_pattern[i-x][j-y] ) cnt++;
}
}
return cnt;
}
int main(void){
scanf("%d %d", &N, &M);
for(int i = 0; i < N; i++){
cin >> B[i];
}
for(int i = 0; i+7 < N; i++){
for(int j = 0; j+7 < M; j++){
min_cnt = min(min_cnt, Bcheck(i, j) );
min_cnt = min(min_cnt, Wcheck(i, j) );
}
}
printf("%d", min_cnt);
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
수 정렬하기3 백준 10989번 (0) | 2020.10.02 |
---|---|
팰린드롬수 백준 1259번 (0) | 2020.10.02 |
골드바흐 파티션 백준 17103번 (0) | 2020.10.02 |
요세푸스 문제 0 백준 11866 (0) | 2020.10.02 |
카드2 백준 2164번 (0) | 2020.09.30 |