ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 뿌요뿌요
    백준알고리즘 2019. 8. 14. 17:53
    #include<iostream>
    #include<queue>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    
    int map[12][6];
    bool d[12][6];
    bool go[12];
    
    int dx[] = {0,0,1,-1};
    int dy[] = {1,-1,0,0};
    int ans = 0;
    bool keep = false;
    
    void modi_map(){
        for(int i = 0; i < 6; i++){
            memset(go,false, sizeof(go));
            for(int j = 0; j < 12; j++) {
                if(map[j][i] != 0) {
                    go[j] = true;
                }
            }
            for(int j = 11; j >= 0; j--){
                if(go[j] == false){
                    for(int k = j-1; k >= 0; k--){
                        if(map[k][i] != 0){
                            map[j][i] = map[k][i];
                            map[k][i] = 0;
                            go[j] = true;
                            go[k] = false;
                            break;
                        }
                    }
                }
            }
        }
    }
    
    void bfs(int x, int y, int value){
    
        int v = value;
        queue<pair<int, int>> q;
        int sx = x; int sy = y;
        q.push({x,y});
        d[x][y] = true;
        int t = 1;
    
        while(!q.empty()){
            x = q.front().first; y = q.front().second;
    
            q.pop();
    
            for(int i = 0; i <4; i++){
                int nx = x+dx[i]; int ny = y+dy[i];
                if(nx >= 0 && nx < 12 &&ny>=0 && ny < 6){
                    if(map[nx][ny] == v){
                        if(d[nx][ny] == false){
                            d[nx][ny] =true;
                            t+=1;
                            q.push({nx,ny});
                        }
                    }
                }
            }
        }
    
        if(t >= 4){
            keep = true;
           x = sx; y = sy;
           queue<pair<int,int>> p;
           p.push({x,y});
           map[x][y]= 0;
           while(!p.empty()){
               x = p.front().first; y = p.front().second;
               p.pop();
               for(int i = 0; i < 4; i++){
                   int nx = x+dx[i]; int ny = y+dy[i];
                   if(nx >= 0 && nx < 12 &&ny>=0 && ny < 6){
                       if(map[nx][ny] == v){
                           map[nx][ny] = 0;
                           p.push({nx,ny});
                       }
                   }
               }
           }
        }
    }
    
    int main(){
        for(int i = 0; i < 12; i++){
            for(int j = 0; j < 6; j++){
                char x;
                cin>>x;
                if(x == 'R')
                    map[i][j] = 1;
                if(x == 'Y')
                    map[i][j] = 2;
                if(x == 'G')
                    map[i][j] = 3;
                if(x == 'P')
                    map[i][j] = 4;
                if(x== 'B')
                    map[i][j] = 5;
            }
        }
    
    
        while(true) {
            keep = false;
            modi_map();
            for (int i = 0; i < 12; i++) {
                for (int j = 0; j < 6; j++) {
                    if (map[i][j] != 0) {
                        memset(d, false, sizeof(d));
                        bfs(i, j, map[i][j]);
                        
                    }
                }
            }
            if(keep == false){
                break;
            }
            ans++;
        }
        cout<<ans<<'\n';
    }
    

     

    BFS 문제

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

    나이트의 이동  (0) 2019.08.14
    다리만들기  (0) 2019.08.14
    배열 돌리기 4  (0) 2019.08.13
    연구소 3  (0) 2019.08.11
    종이조각  (0) 2019.08.11

    댓글

Designed by Tistory.