ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 경사로
    백준알고리즘 2019. 8. 2. 20:08
    #include<iostream>
    #include<cstdlib>
    using namespace std;
    
    int n, m;
    int map[100][100];
    bool d[100];
    
    int main() {
        cin>>n>>m;
    
    
        for (int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                cin>>map[i][j];
            }
        }
        bool pan = true;
        int sum = 0;
        for(int i = 0; i < n; i++){
            for(int s = 0; s < n; s++){
                d[s] = false;
            }
            pan = true;
            int temp = map[i][0];
            int shit = 0;
            for(int j = 1; j < n; j++) {
                if(abs(temp- map[i][j])>1) {
                    pan=false;
                    break;
                }
                if(temp == map[i][j]){
                    temp = map[i][j];
                    continue;
                }
                else if(temp > map[i][j]){
                    int t = 0;
    
                    for(int k = j; k < j+m; k++){
                        if(k >= n) break;
                        if(k < n) {
                            if (d[k] == false) {
                                if(map[i][j] == map[i][k]) {
                                    d[k] = true;
                                    t++;
                                }
                                else break;
                            }
                        }
    
                    }
                    temp = map[i][j];
                    if(t != m) {
                        pan = false;
                        break;
                    }
                }
                else if(temp < map[i][j]){
                    int t = 0;
                        for (int k = j - 1; k > j - 1 - m; k--) {
                            if(k < 0) break;
                            if (k >= 0) {
                                if (d[k] == false) {
                                    if(map[i][j-1] == map[i][k]) {
                                        d[k] = true;
                                        t++;
                                    }
                                    else break;
                                }
                            }
    
                        }
                        temp = map[i][j];
                        if (t != m) {
                            pan = false;
                            break;
                        }
    
                }
            }
            if(pan == true) {
                sum++;
            }
        }
    
        for(int i = 0; i < n; i++){
            for(int s = 0; s < n; s++){
                d[s] = false;
            }
            pan = true;
            int temp = map[0][i];
            int shit = 0;
            for(int j = 1; j < n; j++) {
                if(abs(temp - map[j][i])> 1) {
                    pan = false;
                    break;
                }
                if(temp == map[j][i]){
                    temp = map[j][i];
                    continue;
                }
                else if(temp > map[j][i]){
                    int t = 0;
    
                    for(int k = j; k < j+m; k++){
                        if(k >= n) break;
                        if(k < n) {
                            if (d[k] == false) {
                                if(map[j][i] == map[k][i]) {
                                    d[k] = true;
                                    t++;
                                }
                                else break;
                            }
                        }
    
                    }
                    temp = map[j][i];
                    if(t != m) {
                        pan = false;
                        break;
                    }
                }
                else if(temp < map[j][i]){
                    int t = 0;
                    for(int k = j-1; k > j-1 -m; k-- ){
                        if(k < 0) break;
                        if(k >= 0){
                            if(d[k] == false){
                                if(map[j-1][i] == map[k][i]) {
                                    d[k] = true;
                                    t++;
                                }
                                else break;
                            }
                        }
                        else break;
                    }
                    temp = map[j][i];
                    if(t != m) {
                        pan = false;
                        break;
                    }
                }
            }
            if(pan == true) {
                sum++;
            }
        }
    
        cout<<sum<<endl;
    
    }

    전형적인 브루트포스 문제, 크기도 크지않고 시간도 오래안걸림 2n^2승걸리는듯

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

    구슬탈출2  (0) 2019.08.06
    치킨배달  (0) 2019.08.02
    미로탐색  (0) 2019.08.01
    낚시왕  (0) 2019.08.01
    2048 (Easy)  (0) 2019.07.31

    댓글

Designed by Tistory.