https://www.acmicpc.net/problem/7569
๋ฌธ์
์ฒ ์์ ํ ๋งํ ๋์ฅ์์๋ ํ ๋งํ ๋ฅผ ๋ณด๊ดํ๋ ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ ๋งํ ๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฒฉ์๋ชจ์ ์์์ ์นธ์ ํ๋์ฉ ๋ฃ์ ๋ค์, ์์๋ค์ ์์ง์ผ๋ก ์์ ์ฌ๋ ค์ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ค.
์ฐฝ๊ณ ์ ๋ณด๊ด๋๋ ํ ๋งํ ๋ค ์ค์๋ ์ ์ต์ ๊ฒ๋ ์์ง๋ง, ์์ง ์ต์ง ์์ ํ ๋งํ ๋ค๋ ์์ ์ ์๋ค. ๋ณด๊ด ํ ํ๋ฃจ๊ฐ ์ง๋๋ฉด, ์ต์ ํ ๋งํ ๋ค์ ์ธ์ ํ ๊ณณ์ ์๋ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ต์ ํ ๋งํ ์ ์ํฅ์ ๋ฐ์ ์ต๊ฒ ๋๋ค. ํ๋์ ํ ๋งํ ์ ์ธ์ ํ ๊ณณ์ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ๋ค ์ฌ์ฏ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ฅผ ์๋ฏธํ๋ค. ๋๊ฐ์ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ค์๊ฒ๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ฉฐ, ํ ๋งํ ๊ฐ ํผ์ ์ ์ ๋ก ์ต๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฒ ์๋ ์ฐฝ๊ณ ์ ๋ณด๊ด๋ ํ ๋งํ ๋ค์ด ๋ฉฐ์น ์ด ์ง๋๋ฉด ๋ค ์ต๊ฒ ๋๋์ง ๊ทธ ์ต์ ์ผ์๋ฅผ ์๊ณ ์ถ์ด ํ๋ค.
ํ ๋งํ ๋ฅผ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ ๊ฒฉ์๋ชจ์์ ์์๋ค์ ํฌ๊ธฐ์ ์ต์ ํ ๋งํ ๋ค๊ณผ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฉฐ์น ์ด ์ง๋๋ฉด ํ ๋งํ ๋ค์ด ๋ชจ๋ ์ต๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ๋จ, ์์์ ์ผ๋ถ ์นธ์๋ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์๋ ์๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ 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๋ฒ: ํ ๋งํ
์ 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> ๋ฅผ ๋ฃ์ด ํด๊ฒฐ
'๐ Baaaaaarking > 0x09๊ฐ - BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ G4][C++] ๋ฐฑ์ค 4179๋ฒ: ๋ถ! (0) | 2022.03.16 |
---|---|
[BOJ S2][C++] ๋ฐฑ์ค 7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2022.03.15 |
[BOJ G5][C++] ๋ฐฑ์ค 7576๋ฒ: ํ ๋งํ (0) | 2022.03.09 |
[BOJ G5][C++] ๋ฐฑ์ค 10026๋ฒ: ์ ๋ก์์ฝ (0) | 2022.03.08 |
[BOJ S1][C++] ๋ฐฑ์ค 2178๋ฒ : ๋ฏธ๋ก ํ์ (0) | 2022.03.08 |