๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS

[BOJ G4][C++] ๋ฐฑ์ค€ 5427๋ฒˆ : ๋ถˆ

์„ ๋‹ฌ 2022. 3. 19. 16:00
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/5427

 

5427๋ฒˆ: ๋ถˆ

์ƒ๊ทผ์ด๋Š” ๋นˆ ๊ณต๊ฐ„๊ณผ ๋ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฑด๋ฌผ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๊ฑด๋ฌผ์˜ ์ผ๋ถ€์—๋Š” ๋ถˆ์ด ๋‚ฌ๊ณ , ์ƒ๊ทผ์ด๋Š” ์ถœ๊ตฌ๋ฅผ ํ–ฅํ•ด ๋›ฐ๊ณ  ์žˆ๋‹ค. ๋งค ์ดˆ๋งˆ๋‹ค, ๋ถˆ์€ ๋™์„œ๋‚จ๋ถ ๋ฐฉํ–ฅ์œผ๋กœ ์ธ์ ‘ํ•œ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ํผ์ ธ๋‚˜๊ฐ„๋‹ค. ๋ฒฝ์—

www.acmicpc.net

 

๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ๋นˆ ๊ณต๊ฐ„๊ณผ ๋ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฑด๋ฌผ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๊ฑด๋ฌผ์˜ ์ผ๋ถ€์—๋Š” ๋ถˆ์ด ๋‚ฌ๊ณ , ์ƒ๊ทผ์ด๋Š” ์ถœ๊ตฌ๋ฅผ ํ–ฅํ•ด ๋›ฐ๊ณ  ์žˆ๋‹ค.

๋งค ์ดˆ๋งˆ๋‹ค, ๋ถˆ์€ ๋™์„œ๋‚จ๋ถ ๋ฐฉํ–ฅ์œผ๋กœ ์ธ์ ‘ํ•œ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ํผ์ ธ๋‚˜๊ฐ„๋‹ค. ๋ฒฝ์—๋Š” ๋ถˆ์ด ๋ถ™์ง€ ์•Š๋Š”๋‹ค. ์ƒ๊ทผ์ด๋Š” ๋™์„œ๋‚จ๋ถ ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ์ƒ๊ทผ์ด๋Š” ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๊ณ , ๋ถˆ์ด ์˜ฎ๊ฒจ์ง„ ์นธ ๋˜๋Š” ์ด์ œ ๋ถˆ์ด ๋ถ™์œผ๋ ค๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ์ƒ๊ทผ์ด๊ฐ€ ์žˆ๋Š” ์นธ์— ๋ถˆ์ด ์˜ฎ๊ฒจ์˜ด๊ณผ ๋™์‹œ์— ๋‹ค๋ฅธ ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นŒ๋”ฉ์˜ ์ง€๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ๋นŒ๋”ฉ์„ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์ตœ๋Œ€ 100๊ฐœ์ด๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๋นŒ๋”ฉ ์ง€๋„์˜ ๋„ˆ๋น„์™€ ๋†’์ด w์™€ h๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ w,h ≤ 1000)

๋‹ค์Œ h๊ฐœ ์ค„์—๋Š” w๊ฐœ์˜ ๋ฌธ์ž, ๋นŒ๋”ฉ์˜ ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

  • '.': ๋นˆ ๊ณต๊ฐ„
  • '#': ๋ฒฝ
  • '@': ์ƒ๊ทผ์ด์˜ ์‹œ์ž‘ ์œ„์น˜
  • '*': ๋ถˆ

๊ฐ ์ง€๋„์— @์˜ ๊ฐœ์ˆ˜๋Š” ํ•˜๋‚˜์ด๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋นŒ๋”ฉ์„ ํƒˆ์ถœํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋นŒ๋”ฉ์„ ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” "IMPOSSIBLE"์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

[๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS] - [BOJ G4][C++] ๋ฐฑ์ค€ 4179๋ฒˆ: ๋ถˆ!

 

[BOJ G4][C++] ๋ฐฑ์ค€ 4179๋ฒˆ: ๋ถˆ!

https://www.acmicpc.net/problem/4179 4179๋ฒˆ: ๋ถˆ! ์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‘ ์ •์ˆ˜ R๊ณผ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, 1 ≤ R, C ≤ 1000 ์ด๋‹ค. R์€ ๋ฏธ๋กœ ํ–‰์˜ ๊ฐœ์ˆ˜, C๋Š” ์—ด์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๋‹ค์Œ ์ž…๋ ฅ์œผ๋กœ R์ค„๋™์•ˆ..

whkakrkr.tistory.com

4179๋ฒˆ ์˜ ๋‹ค์ค‘์ผ€์ด์Šค ๋ฒ„์ „.. ์œผ๋กœ ์‰ฝ๊ฒŒ ํ’€๋ฆด๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ

์•„๋‹ˆ์˜€๋‹คใ… ใ… 

 

์šฐ์„  ์ž˜ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์˜ˆ์ œ๋„ ๋‹ค ๋งž์•˜๋Š”๋ฐ

 

๋„ฃ์ž๋งˆ์ž 0%์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค

 

๊ฒŒ์‹œํŒ์„ ์ฐพ์•„๋ณด๋‹ˆ.. ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•œ๊ฑฐ๋ผ ํ•˜๋”๋ผ..

๊ทธ๋ž˜์„œ ๋ฐฐ์—ด ํฌ๊ธฐ ๋ฐ”๊ฟ”์คฌ๋”๋‹ˆ

 

25%์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค..

 

์ฐพ์•„๋ณด๋‹ˆ 25%์—์„œ ํ‹€๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ƒ๋‹นํžˆ ๋งŽ์•˜๋‹ค ใ…Žใ…Ž

์Šฌํ”ˆ ์˜ํ˜ผ๋“ค ใ… ใ… 

๋‹คํ–‰ํžˆ ๊ฒŒ์‹œํŒ ์ •๋… ๋์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋Œ๋•Œ๋งˆ๋‹ค ํ๋ฅผ ๋น„์›Œ์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธด ์ผ์ด๋ผ๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค!

 

https://www.acmicpc.net/board/view/71789

 

๊ธ€ ์ฝ๊ธฐ - ์•„๋ž˜ ๊ธ€๋“ค ์ฐธ๊ณ  ํ•ด๋„ 25%์—์„œ ๊ฑธ๋ฆฌ๋Š” ๋ถ„๋“ค ๋ณด์„ธ์š”

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

์งง์ง€๋งŒ ๊ฐ์‚ฌํ•œ ๊ฒŒ์‹œํŒ ๊ธ€ ํ•˜๋‚˜..

์ข‹์•„์š” ๊ฐ์‚ฌํžˆ ๋ˆ„๋ฅด๊ณ  ํ•ด๊ฒฐํ–ˆ๋‹ค..

 

// Authored by : seondal
// ํ’€์ด : https://whkakrkr.tistory.com/
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <queue>

using namespace std;

int dx[8] = {0,0,1,-1};
int dy[8] = {1,-1,0,0};

queue<pair<int, int>> q;
queue<pair<int, int>> s;

char board[1002][1002];
int fire[1002][1002];
int jihun[1002][1002];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int t;
    cin >> t;
    while (t--) {
        // ์ดˆ๊ธฐํ™”
        bool success = false;
        while(!q.empty()) q.pop();
        while(!s.empty()) s.pop();
        
        // ์ž…๋ ฅ ๋ฐ›๊ธฐ
        int r,c;
        cin >> c >> r;
        for(int i=0; i<r; i++){
            for(int j=0; j<c; j++){
                cin >> board[i][j];
                
                fire[i][j] = -1;
                jihun[i][j] = -1;
                
                if(board[i][j] == '*'){
                    q.push({i,j});
                    fire[i][j] = 0;
                }
                if(board[i][j] == '@') {
                    s.push({i,j});
                    jihun[i][j] = 0;
                }
            }
        }
        
        // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ถˆ์˜ ์œ„์น˜
        while(!q.empty()){
            pair<int, int> current = q.front();
            q.pop();
            
            for(int dir=0; dir<4; dir++){
                int x = current.first + dx[dir];
                int y = current.second + dy[dir];
                
                if(x<0 || x>=r || y<0 || y>=c) continue;
                if(fire[x][y] >= 0 || board[x][y] == '#') continue; // ์ด๋ฏธ ๋ถˆ์ด ์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด๋ผ๋ฉด ํŒจ์Šค
                
                fire[x][y] = fire[current.first][current.second] + 1;
                q.push({x,y});
            }
        }
        
        // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ง€ํ›ˆ์ด์˜ ์œ„์น˜
        while(!s.empty() && !success) {
            pair<int, int> current = s.front();
            s.pop();
            
            for(int dir=0; dir<4; dir++){
                int x = current.first + dx[dir];
                int y = current.second + dy[dir];
                
                // ๋ฏธ๋กœ ํƒˆ์ถœ์‹œ ์ข…๋ฃŒ
                if(x<0 || x>=r || y<0 || y>=c) {
                    cout << jihun[current.first][current.second] + 1 << "\n";
                    success = true;
                    break;
                }
                
                // ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด ์žˆ์œผ๋ฉด ํŒจ์Šค
                if(jihun[x][y] >= 0 || board[x][y] == '#') continue;
                
                // ๊ฐ€๋ ค๋Š” ๊ณณ์— ๋ถˆ์ด ์ด๋ฏธ ์žˆ๋‹ค๋ฉด ํŒจ์Šค
                if(fire[x][y] != -1 && jihun[current.first][current.second] + 1 >= fire[x][y]) continue;
                
                jihun[x][y] = jihun[current.first][current.second] + 1;
                s.push({x,y});
            }
        }
        
        // ํƒˆ์ถœ ์‹คํŒจ
        if(!success)
            cout << "IMPOSSIBLE\n";
    }
        return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•