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

[BOJ G5][C++] ๋ฐฑ์ค€ 7569๋ฒˆ: ํ† ๋งˆํ† 

์„ ๋‹ฌ 2022. 3. 10. 21:48
๋ฐ˜์‘ํ˜•

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

 

7569๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N๊ณผ ์Œ“์•„์˜ฌ๋ ค์ง€๋Š” ์ƒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

๋ฌธ์ œ

์ฒ ์ˆ˜์˜ ํ† ๋งˆํ†  ๋†์žฅ์—์„œ๋Š” ํ† ๋งˆํ† ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ† ๋งˆํ† ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฒฉ์ž๋ชจ์–‘ ์ƒ์ž์˜ ์นธ์— ํ•˜๋‚˜์”ฉ ๋„ฃ์€ ๋‹ค์Œ, ์ƒ์ž๋“ค์„ ์ˆ˜์ง์œผ๋กœ ์Œ“์•„ ์˜ฌ๋ ค์„œ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•œ๋‹ค.

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

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

์ž…๋ ฅ

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N๊ณผ ์Œ“์•„์˜ฌ๋ ค์ง€๋Š” ์ƒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 1 ≤ H ≤ 100 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ฐ€์žฅ ๋ฐ‘์˜ ์ƒ์ž๋ถ€ํ„ฐ ๊ฐ€์žฅ ์œ„์˜ ์ƒ์ž๊นŒ์ง€์— ์ €์žฅ๋œ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฆ‰, ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ๋‹ด๊ธด ํ† ๋งˆํ† ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ค„์—๋Š” ์ƒ์ž ๊ฐ€๋กœ์ค„์— ๋“ค์–ด์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์˜ ์ƒํƒœ๊ฐ€ M๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ •์ˆ˜ 1์€ ์ต์€ ํ† ๋งˆํ† , ์ •์ˆ˜ 0 ์€ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† , ์ •์ˆ˜ -1์€ ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Ÿฌํ•œ N๊ฐœ์˜ ์ค„์ด H๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ์ฃผ์–ด์ง„๋‹ค.

ํ† ๋งˆํ† ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์—ฌ๋Ÿฌ๋ถ„์€ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€ ์ตœ์†Œ ๋ฉฐ์น ์ด ๊ฑธ๋ฆฌ๋Š”์ง€๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ์ €์žฅ๋  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฉด 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ณ , ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€๋Š” ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

ํ’€์ด

[๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS] - [BOJ G5][C++] ๋ฐฑ์ค€ 7576๋ฒˆ: ํ† ๋งˆํ† 

 

[BOJ G5][C++] ๋ฐฑ์ค€ 7576๋ฒˆ: ํ† ๋งˆํ† 

https://www.acmicpc.net/problem/7576 7576๋ฒˆ: ํ† ๋งˆํ†  ์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค...

whkakrkr.tistory.com

์œ„ 7576๋ฒˆ ํ† ๋งˆํ† ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „

2์ฐจ์› BFS ๋ฌธ์ œ๋ฅผ 3์ฐจ์›์œผ๋กœ ๋ฐ”๊พผ ํ˜•ํƒœ๋‹ค

๊ทผ๋ฐ ํ‹ฐ์–ด๋Š” ๊ฐ™์Œ (G5)

 

์‚ผ์ฐจ์› ๋ฐฐ์—ด.. ์†”์งํžˆ ๋จธ๋ฆฌ๋กœ ์ดํ•ดํ•˜๋Š”๊ฑด ์–ด๋ ต์ง€๋งŒ

๊ทธ๋ƒฅ BFS ๋ฅผ 3์นธ์งœ๋ฆฌ ๋ฐฐ์—ด๋กœ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข€ ํŽธํ•˜๋‹ค

 

๋‹ค๋งŒ dz ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์œ„์ธต ์•„๋ž˜์ธต์œผ๋กœ ์ต๋Š”๊ฒŒ ๋ฒˆ์งˆ(?) ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ•ด์ฃผ๊ณ ,

pair ๋Œ€์‹  tuple ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ์— ์ขŒํ‘œ ์„ธ๊ฐœ๋ฅผ ๋„ฃ์–ด์คฌ๋‹ค

 


์ด์ฏค์—์„œ ์•Œ์•„๋ณด๋Š”

ํŽ˜์–ด์™€ ํŠœํ”Œ - C++ ํŽธ

pair ์‚ฌ์šฉ๋ฒ•

pair<int, int, int> p = {x, y};

// x = p.first
// y = p.second

tuple ์‚ฌ์šฉ๋ฒ•

tuple<int, int, int> t = {x, y, z};

int a, b, c;
tie(a, b, c) = t

// a = x, b = y, c = z

 

์ฝ”๋“œ

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

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

using namespace std;

int board[101][101][101];
int dis[101][101][101];

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

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    queue<tuple<int, int, int>> q;
    
    // ์ž…๋ ฅ
    int m, n, h;
    cin >> m >> n >> h;
    for(int i=0; i<h; i++){
        for(int j=0; j<n; j++){
            for(int k=0; k<m; k++){
                cin >> board[i][j][k];
                if(board[i][j][k] == 0) dis[i][j][k] = -1;
                if(board[i][j][k] == 1) q.push({i,j,k});
            }
        }
    }
    
    
    // ๊ณ„์‚ฐ
    while(!q.empty()){
        tuple<int, int, int> current = q.front();
        q.pop();
        int cx, cy, cz;
        tie(cz, cy, cx) = current;
        
        for(int dir=0; dir<6; dir++) {
            int z = cz + dz[dir];
            int y = cy + dy[dir];
            int x = cx + dx[dir];
            if(z<0 || z>=h || y<0 || y>=n || x<0 || x>=m) continue;
            if(dis[z][y][x] >= 0) continue;
            dis[z][y][x] = dis[cz][cy][cx] + 1;
            q.push({z,y,x});
        }
    }
    
    // ์ถœ๋ ฅ
    int ans=0;
    for(int i=0; i<h; i++){
        for(int j=0; j<n; j++){
            for(int k=0; k<m; k++){
                if(dis[i][j][k] == -1){
                    cout << -1 << "\n";
                    return 0;
                }
                if(dis[i][j][k] > ans) ans = dis[i][j][k];
            }
        }
    }
    cout << ans << "\n";
    return 0;
}

/*
 */

๋‹ค๋งŒ ์™œ์ธ์ง€ #include <iostream> ๊ณผ #include <queue> ๋ฅผ ํ–ˆ๋”๋‹ˆ

xcode IDE ์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ BOJ์—์„œ๋Š” ์ปดํŒŒ์ผ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹คใ… ใ… 

tuple ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ ์™œ์ธ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค...

์šฐ์„  ๊ธ‰ํ•œ๋Œ€๋กœ #inlcude <bits/stdc++.h> ๋ฅผ ๋„ฃ์–ด ํ•ด๊ฒฐ

๋ฐ˜์‘ํ˜•