https://www.acmicpc.net/problem/17836
๋ฌธ์
์ฉ์ฌ๋ ๋ง์์ด ์จ๊ฒจ๋์ ๊ณต์ฃผ๋์ ๊ตฌํ๊ธฐ ์ํด (N, M) ํฌ๊ธฐ์ ์ฑ ์ ๊ตฌ (1,1)์ผ๋ก ๋ค์ด์๋ค. ๋ง์์ ์ฉ์ฌ๊ฐ ๊ณต์ฃผ๋ฅผ ์ฐพ์ง ๋ชปํ๋๋ก ์ฑ์ ์ฌ๋ฌ ๊ตฐ๋ฐ ๋ง๋ฒ ๋ฒฝ์ ์ธ์๋์๋ค. ์ฉ์ฌ๋ ํ์ฌ์ ๊ฐ์ง๊ณ ์๋ ๋ฌด๊ธฐ๋ก๋ ๋ง๋ฒ ๋ฒฝ์ ํต๊ณผํ ์ ์์ผ๋ฉฐ, ๋ง๋ฒ ๋ฒฝ์ ํผํด (N, M) ์์น์ ์๋ ๊ณต์ฃผ๋์ ๊ตฌ์ถํด์ผ๋ง ํ๋ค.
๋ง์์ ์ฉ์ฌ๋ฅผ ๊ดด๋กญํ๊ธฐ ์ํด ๊ณต์ฃผ์๊ฒ ์ ์ฃผ๋ฅผ ๊ฑธ์๋ค. ์ ์ฃผ์ ๊ฑธ๋ฆฐ ๊ณต์ฃผ๋ T์๊ฐ ์ด๋ด๋ก ์ฉ์ฌ๋ฅผ ๋ง๋์ง ๋ชปํ๋ค๋ฉด ์์ํ ๋๋ก ๋ณํ๊ฒ ๋๋ค. ๊ณต์ฃผ๋์ ๊ตฌ์ถํ๊ณ ํ๋ฌํฌ์ฆ ํ๊ณ ์ถ์ ์ฉ์ฌ๋ ๋ฐ๋์ T์๊ฐ ๋ด์ ๊ณต์ฃผ๋์ด ์๋ ๊ณณ์ ๋๋ฌํด์ผ ํ๋ค. ์ฉ์ฌ๋ ํ ์นธ์ ์ด๋ํ๋ ๋ฐ ํ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ณต์ฃผ๋์ด ์๋ ๊ณณ์ ์ ํํ T์๊ฐ๋ง์ ๋๋ฌํ ๊ฒฝ์ฐ์๋ ๊ตฌ์ถํ ์ ์๋ค. ์ฉ์ฌ๋ ์ํ์ข์ฐ๋ก ์ด๋ํ ์ ์๋ค.
์ฑ์๋ ์ด์ ์ฉ์ฌ๊ฐ ์ฌ์ฉํ๋ ์ ์ค์ ๋ช ๊ฒ "๊ทธ๋"์ด ์จ๊ฒจ์ ธ ์๋ค. ์ฉ์ฌ๊ฐ ๊ทธ๋์ ๊ตฌํ๋ฉด ๋ง๋ฒ์ ๋ฒฝ์ด ์๋ ์นธ์ผ์ง๋ผ๋, ๋จ์จ์ ๋ฒฝ์ ๋ถ์๊ณ ๊ทธ ๊ณต๊ฐ์ผ๋ก ๊ฐ ์ ์๋ค. "๊ทธ๋"์ ์ฑ์ ์ด๋๊ฐ์ ๋ฐ๋์ ํ ๊ฐ ์กด์ฌํ๊ณ , ์ฉ์ฌ๋ ๊ทธ๋์ด ์๋ ๊ณณ์ ๋์ฐฉํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ด ๋ถ์ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ ์ ํ์ด ์๋ค.
์ฐ๋ฆฌ ๋ชจ๋ ์ฉ์ฌ๊ฐ ๊ณต์ฃผ๋์ ์์ ํ๊ฒ ๊ตฌ์ถ ํ ์ ์๋์ง, ์๋ค๋ฉด ์ผ๋ง๋ ๋นจ๋ฆฌ ๊ตฌํ ์ ์๋์ง ์์๋ณด์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ฑ์ ํฌ๊ธฐ์ธ N, M ๊ทธ๋ฆฌ๊ณ ๊ณต์ฃผ์๊ฒ ๊ฑธ๋ฆฐ ์ ์ฃผ์ ์ ํ ์๊ฐ์ธ ์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ์ฒซ ์ค์ ์ธ ๊ฐ์ ์๋ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถ๋๋ค. (3 ≤ N, M ≤ 100, 1 ≤ T ≤ 10000)
๋ ๋ฒ์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง ์ฑ์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ M๊ฐ์ ์๊ฐ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ๊ณต๊ฐ, 1์ ๋ง๋ฒ์ ๋ฒฝ, 2๋ ๊ทธ๋์ด ๋์ฌ์๋ ๊ณต๊ฐ์ ์๋ฏธํ๋ค. (1,1)๊ณผ (N,M)์ 0์ด๋ค.
์ถ๋ ฅ
์ฉ์ฌ๊ฐ ์ ํ ์๊ฐ T์๊ฐ ์ด๋ด์ ๊ณต์ฃผ์๊ฒ ๋๋ฌํ ์ ์๋ค๋ฉด, ๊ณต์ฃผ์๊ฒ ๋๋ฌํ ์ ์๋ ์ต๋จ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์ฉ์ฌ๊ฐ ๊ณต์ฃผ๋ฅผ T์๊ฐ ์ด๋ด์ ๊ตฌ์ถํ ์ ์๋ค๋ฉด, "Fail"์ ์ถ๋ ฅํ๋ค.
๊ณจ๋5
๋ณต์กํ ์ถ๋ ฅ ์์ธ์ฒ๋ฆฌ๋๋ฌธ์ ๋ฐ๋์ ์ ํค๋งจ ๋ฌธ์ .........
ในใ ์๊ณ ๋ฆฌ์ฆ ๋์๋ฆฌ ๋ค๊ธธ ์ํ๋ค
๋ฌผ์ด๋ณผ ์ ์๋ ๋ฉํ ๊ฐ ์๋ค๋๊ฑด ์ ๋ง ์ข์ ์ผ
๋ณต์กํ bfs ๋ฌธ์ ์ธ๋ฏํ๋ค.
gram์ ์ป์ง ์๋ ์ต๋จ๊ฑฐ๋ฆฌ์ gram์ ์ป์ด์ ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๊ตฌํด์
์กฐ๊ฑด์ ๋ง๋ ์ต์๊ฐ์ ์ถ๋ ฅ์ํค๋ฉด ๋๋ค
isgram ๊ฐ์ ๊ตฌํ ๋ end point๋ฅผ gram์ ์์น๋ก ์ค์ ํด์ bfs๋ฅผ ๋๋ฆฌ๊ณ ,
gram์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ์ ํํด์ gram๋ถํฐ ๊ณต์ฃผ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ฉด ๋จ
bfs ํ๋ฒ์ผ๋ก ๋๋ผ ์ ์๋ ์ต์ ํ ๋ฐฉ์๋ ๊ณ ๋ฏผํด๋ณด์์ผ๊ฒ ๋ค.
๋์ ํ์ด
#include <iostream>
#include <queue>
using namespace std;
// boj 17836
int n;
int m;
int t;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int map[101][101] = {0};
pair<int, int> gramPoint;
bool canGo(int visited[101][101], int x, int y, bool gram){
if(x<1 || x>n || y<1 || y>m) return false;
if(visited[x][y] == 1) return false;
if(map[x][y] == 1){
if(gram) return true;
else return false;
}
return true;
}
int bfs(int sx, int sy, int ex, int ey, bool gram){ // ์ต๋จ๊ฑฐ๋ฆฌ
int cnt[101][101] = {0};
int visited[101][101] = {0};
queue<pair<int, int>> q;
q.push({sx, sy});
visited[sx][sy] = 1;
while(!q.empty()){
pair<int,int> a = q.front();
q.pop();
for (int i = 0; i < 4; ++i){
int nx = a.first + dx[i];
int ny = a.second + dy[i];
if(canGo(visited, nx, ny, gram)){
visited[nx][ny] = 1;
q.push({nx, ny});
cnt[nx][ny] = cnt[a.first][a.second] + 1;
// cout << nx<<" "<<ny<<" " << cnt[nx][ny]<<"\n";
if(nx==ex && ny==ey) {
// cout << cnt[nx][ny]<<"---\n";
return cnt[nx][ny];
}
}
}
}
return 0;
}
int main(){
cin >> n >> m >> t;
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= m; ++j){
cin >> map[i][j];
if(map[i][j]==2){
gramPoint = {i, j};
}
}
}
int nogram = bfs(1, 1, n, m, false);
int isgram = bfs(1, 1, gramPoint.first, gramPoint.second, false);
if(isgram!=0){
isgram += bfs(gramPoint.first, gramPoint.second, n, m, true);
}
int mintime = min(nogram, isgram);
if(nogram==0 && isgram==0) cout <<"Fail";
else if(nogram==0 && isgram !=0 ) {
if(isgram > t) cout <<"Fail";
else cout << isgram;
}
else if(nogram!=0 && isgram ==0 ) {
if(nogram > t) cout <<"Fail";
else cout << nogram;
}
else if(mintime > t) cout <<"Fail";
else cout << mintime;
return 0;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 17609 : ํ๋ฌธ (ํฌํฌ์ธํฐ) / ํ ์คํธ์ผ์ด์ค / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.25 |
---|---|
[C++/BOJ] 14891 : ํฑ๋๋ฐํด (์๋ฎฌ๋ ์ด์ ) (0) | 2023.03.23 |
[C++/BOJ] 1806 : ๋ถ๋ถํฉ (ํฌํฌ์ธํฐ) (0) | 2023.03.23 |
[C++/BOJ] 2467 : ์ฉ์ก (ํฌํฌ์ธํฐ) (0) | 2023.03.22 |
[C++/BOJ] 10942 : ํฐ๋ฆฐ๋๋กฌ? (DP) (0) | 2023.03.18 |