백준 1018 c++ 완전탐색(Brute-force Serch)

2021. 11. 3. 02:52알고리즘/백준

728x90

원래 티스토리 해보려고 했는데, 귀찮아서 시작 도안하다가

잔머리? 굴려서 푸는 문제 맞히면 기분 좋잖아요? 

그래서 기분 좋아져서 시작해봄

완전 탐색, 브루트 포스(Brute-force)는 그냥 쉽게말해서 가능한 경우를 일일이 다 탐색하는 방법임

근데 브루트포스 문제들은 다 탐색하면 타임 에러가 뜨겠죠?

그래서 어떻게 시간을 최소화하는지에 따라서 문제를 맞히고, 틀리고 가 결정됨

 

여기 문제 보면 알 수 있는 것처럼 브루트 포스 문제는 시간제한이 있음(하나씩 다 검사하다가는 틀린다는 거)

그래서 어떻게 하면 다 대입안 하고, 시간초과 안하고 찾을 수 있을까? 고민해보니까

시작점만 잘 정하면 되겠다고 생각함(어차피 8X8을 구하는 거닌까) 그래서 시작점을 string크기에 따라서 잘 조절만 하면 할 수 있겠다는 생각을 하게 됐음

뭔 소리냐면

8X8이면 배열[0][0]부터 배열[7][7]까지 비교하는 경우의 수밖에 없는 거고 

10X10이면 배열 시작점이 [0][0], [0][1], [0][2], [1][0], [2][0], [1][1], [2][2] 이렇게 되겠죠?

비교하는 String은 미리 만들어 놨습니다. 

자, 그러면 어떻게 비교하는 코드를 만들까? 처음이라서 코드를 이쁘게 캡처 못하겠어가지고 그냥 코드 올림(양해 좀)

 

 

# include <iostream>
# include <vector>
# include <algorithm>
# include <string>
using namespace std;
string WB[8] = {
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW"
};
string BW[8] = {
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB",
    "BWBWBWBW",
    "WBWBWBWB"

};

string board[50];
int main(void)
{

    int a, b;
    cin >> a >> b;
for (int i = 0; i < a; i++)
{
    cin >> board[i];

}

    int cnt_bw = 10000;
    int cnt_wb = 10000;
    int n = 0;
    for (int i = 0; i <= a - 8; i++)
    {    
// a에 따른 시작점 조절
        for (int j = 0; j <= b - 8; j++) { // b에 따른 시작점조절
          for (int k = 0; k < 8; k++) {
            for (int r = 0; r < 8; r++) {
                if (board[i + k][j+r] != BW[k][r])
                n++;

             }
         }
         cnt_bw = min(n, cnt_bw);
         n = 0;
         }   

    }

    for (int i = 0; i <= a - 8; i++) {// a에 따른 시작점조절
        for (int j = 0; j <= b - 8; j++) {// b에 따른 시작점조절
            for (int k = 0; k < 8; k++) {
                for (int r = 0; r < 8; r++) {
                if (board[i + k][r + j] != WB[k][r])
                n++;

                }
            }
        cnt_wb = min(n, cnt_wb);
        n = 0;
        }

    }   
    int result = min(cnt_wb, cnt_bw);
    cout << result;

}

 

 

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 24479 C++  (0) 2022.05.28
백준 22351 수학은 체육과목 입니다. 3  (0) 2022.05.23
백준 4150 피보나치 수(c++)  (1) 2022.04.02
(C++) 백준 1111번 IQ Test  (0) 2021.12.01
백준 다리놓기 1010 C++  (0) 2021.11.26