소스코드
#include <iostream>
using namespace std;
int main(){
int A, B;
cin >> A >> B;
int alast = A-8;
int blast = B-8;
int i, j, k, l;
char chess[A+1][B+1];
for (i=0; i<A; i++) {
cin >> chess[i];
}
int min = 65;
for (i=0; i<=alast; i++){
for (j=0; j<=blast; j++){
int temp1 = 0, temp2 = 0;
int astart = i;
int bstart = j;
for (k=astart; k<astart+8; k++){
for (l=bstart; l<bstart+8; l++){
if ((k+l-astart-bstart)%2 == 0 && chess[k][l] != 'B') temp1++;
else if ((k+l-astart-bstart)%2 == 1 && chess[k][l] == 'B') temp1++;
else if ((k+l-astart-bstart)%2 == 0 && chess[k][l] != 'W') temp2++;
else if ((k+l-astart-bstart)%2 == 1 && chess[k][l] == 'W') temp2++;
}
}
if (temp1 < min) min = temp1;
if (temp2 < min) min = temp2;
}
}
cout << min;
}
1. 구상
우선 시작은 나쁘지 않았다. 일단 받은 주어진 박스의 크기에서 8*8로 자를 시작점은 (좌표, index 기준) 0에서부터 (x-8)까지이다. 이 두 loop을 일단 돌려서 각 시작점이 바뀔 때마다 바뀌는 temp값을 받았다.
그리고 다시 for loop을 두 번 돌려 각 시작점 기준 +8까지의 좌표를 완전탐색했다. (for loop을 4번 돌리는 발상을 하기가 쉽지 않았는데 (시간 초과 걸릴 줄 알았는데) 이게 맞는 거더라..)
k+l-(시작 좌표값) 이 짝수이면 시작점과 같은 값을, 홀수이면 시작점과 다른 값을 가져야 한다.
근데 여기서 잘못 생각한 점.. 시작점의 값은 "B" 도 될 수 있고, "W" 도 될 수 있다는 점..
이것을 잘못 생각해서 좀 고생했다.
결과적으로는 구현에는 성공했다.
'solving > C, C++' 카테고리의 다른 글
[백준] 15650번 N과 M(2) - C++ (0) | 2022.09.27 |
---|---|
[백준] 2493번 탑 - C++ (0) | 2022.09.24 |
[백준] 1373번 2진수 8진수 (0) | 2022.09.07 |
[백준] 1356번 유진수 (숫자 배열로 받기, 배열에서 index 이동시키기) (0) | 2022.09.05 |
[백준] 1296번 팀 이름 정하기 (변수 설정, strcmp) (0) | 2022.09.04 |