ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BaekJoon] 4179๋ฒˆ : ๋ถˆ!
    SW Test/BaekJoon 2021. 4. 23. 01:43
    ๋ฐ˜์‘ํ˜•
    • ์ด ๊ธ€์€ c++๋กœ ํ’€์ด๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ๋ฌธ์ œ

     

    ์˜ˆ์‹œ

     

    ํ’€์ด

    • BFS ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋ถˆ์— ์‹œ์ž‘์ ์—์„œ BFS๋ฅผ ๋Œ๋ฆฐ ํ›„ ์ง€ํ›ˆ์ด๋ฅผ BFS๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ๋ถˆ์ด ๋จผ์ € ํ™•์‚ฐ๋œ ๊ฒฝ์šฐ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ 2๊ฐ€์ง€๋กœ ๋ถˆ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๊ณผ, ๋ถˆ์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
    • ์ฆ‰, ๋ถˆ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ๋Š” BFS๋ฅผ ๋˜‘๊ฐ™์ด ํ•ด๋„ ๊ดœ์ฐฎ์ง€๋งŒ, ๋ถˆ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ถˆ์ด ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์€ ์ดˆ๊ธฐํ™”์ธ ์ƒํƒœ ๊ทธ๋ž˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    #include<iostream>
    #include<queue>
    #include<utility>
    #include<string>
    using namespace std;
    
    int n,m;
    int arr[1000][1000];
    int fdist[1000][1000];
    int jdist[1000][1000];
    int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
    
    bool inside(int y,int x){
        return 0<=y && y<n && 0<=x && x<m;
    }
    
    bool isboarder(int y,int x){
        return y == 0 || x == 0 || y == n-1 || x == m-1;
    }
    
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        cin>>n>>m;
        queue<pair<int,int>> fq;
        queue<pair<int,int>> jq;
        
        for(int i=0;i<n;i++){
            string s;
            cin>>s;
            for(int j=0;j<m;j++){
                if(s[j] == '#'){
                    arr[i][j] = -1;
                }else if(s[j] == '.'){
                    arr[i][j] = 0;
                }else if(s[j] == 'J'){
                    arr[i][j] = 1;
                    jq.push({i,j});
                    jdist[i][j] = 1;
                }else{
                    arr[i][j] = 2;
                    fq.push({i,j});
                    fdist[i][j] = 1;
                }
            }
        }
        
        while(!fq.empty()){
            int y = fq.front().first;
            int x = fq.front().second;
            fq.pop();
            
            for(int i=0;i<4;i++){
                int dy = y + dir[i][0];
                int dx = x + dir[i][1];
                
                if(inside(dy,dx) && arr[dy][dx]!=-1 && !fdist[dy][dx]){
                    fq.push({dy,dx});
                    fdist[dy][dx] = fdist[y][x] + 1;
                }
            }
        }
        
        while(!jq.empty()){
            int y = jq.front().first;
            int x = jq.front().second;
            jq.pop();
            
            for(int i=0;i<4;i++){
                int dy = y + dir[i][0];
                int dx = x + dir[i][1];
                
                if(!inside(dy, dx)){
                    cout<<jdist[y][x];
                    return 0;
                }
                
                if(arr[dy][dx]!=-1 && jdist[dy][dx] == 0){
                    if(fdist[dy][dx] == 0 || (jdist[y][x] + 1 < fdist[dy][dx])){
                        jq.push({dy,dx});
                        jdist[dy][dx] = jdist[y][x] + 1;
                    }
                }
            }
        }
        
        cout<<"IMPOSSIBLE";
        
    }
    • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”,.
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.