#include <iostream>
#include <algorithm>
using namespace std;
char chess[60][60] = {0,};
string wf[8] = {
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"}
};
string bf[8] = {
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"},
{"BWBWBWBW"},
{"WBWBWBWB"}
};
int compare(int y, int x)
{
int wcount=0, bcount=0;
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if(wf[i][j] != chess[y+i][x+j]){
wcount++;
}
if(bf[i][j] != chess[y+i][x+j]){
bcount++;
}
}
}
if (wcount <= bcount) return wcount;
else return bcount;
}
int main()
{
int N,M;
int result=999999999;
scanf("%d %d",&N,&M);
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
scanf(" %c",&chess[i][j]);
}
}
for(int i=0;i+7<N;i++){
for(int j=0;j+7<M;j++){
result = min(compare(i,j),result);
}
}
cout << result <<endl;
}
아이디어 : 8*8 체스판 2개가 정해져 있으므로 두 개의 체스판을 미리 만들어두고 주어진 체스판을 옮겨가면서 비교하기
아이디어는 떠올랐으나 구현하기가 쉽지 않아서, 고민 끝에 다른 블로그를 참고했다.
처음에는 C언어로 구현을 했으나, 오류가 생기고 해결할 수가 없었다. 그 이유는 아마도 초기화와 메모리 할당을 하지 않아서인 것 같다.
아래의 링크가 원래 내가 구현하던 방식과 비슷했다.
www.dogdrip.net/computer/222196880
C++도 배우고, C언어 동적할당에 대해서도 훈련해야겠다.
'🧐 Algorithm' 카테고리의 다른 글
[백준 1152번 C/C언어] 단어의 개수 (0) | 2021.02.07 |
---|---|
[백준 5585번 C/C언어] 거스름돈 (0) | 2021.02.07 |
[백준 7568번 C/C언어] 덩치 (0) | 2021.01.27 |
[백준 2231번 C/C언어] 분해합 (0) | 2021.01.27 |
[백준 2798번 C/C언어] 블랙잭 (0) | 2021.01.27 |