๐งจ ๋ฐฑ์ค 2178๋ฒ ๋ฏธ๋กํ์
๋ฌธ์ ๋์ด๋ : ์ค๋ฒ1
๋ฌธ์ ๋งํฌ : www.acmicpc.net/problem/2178
2178๋ฒ: ๋ฏธ๋ก ํ์
์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
www.acmicpc.net
๐งจ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๋ฐ C++ ์ฝ๋
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ ์ข ๋ฏ์ค์๋ค. ๋ญ๊ฐ ๋๋น์ฐ์ ํ์์ ์ฌ์ฉํ๋ ๊ฑฐ ๊ฐ์๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ํ์ฐธ ๊ณ ๋ฏผํ๋ค. ๋ฏธ๋ก์์ ์นธ ์ด๋์ ํด์ผ ํ๋ฏ๋ก ์ด์ฉ ์ ์์ด ์ํ์ข์ฐ ๋์๋น๊ต๊ฐ ๋ค์ด๊ฐ์ผํ๋ค. ๊ทธ๋ํ ํ์์ ์ด์ฉํ ๋ฌธ์ ๋ ๋๋ถ๋ถ ์ํ๋ ๊ฐ๋ง์ ๊ตฌํ๋ ค๊ณ ํ๋ฉด ์ด๋ ต๊ฒ ๋๊ปด์ง๋ค. ๊ฐ ์ ์๋ ๋ชจ๋ ์นธ์ ๋ํด ์ง๋์ผ ํ๋ ์ต์ ์นธ ์๋ฅผ ๊ณ์ฐํด์ผ (N, M)๊น์ง ๊ฐ๋ ์ต์ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ ์๋ค. ๋๊ฐ์ด BFS๋ฅผ ์ฌ์ฉํ๋, ์ฒ์์ 2์ฐจ์ ํํ์ ๋ฏธ๋ก ๋ชจ์์ผ๋ก ์ ๋ ฅ๋ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ขํ๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค. ๋ฐ๋ผ์ pair<int, int> ๋ก (x, y) ์ขํ๋ฅผ ํํํ๋ค.
์์ ์ ์ด๋์ ๊ฐ ์ํ์ข์ฐ๋ฅผ ๋ํ๋ด๋ ํํ์ผ๋ก dx[] = { -1, 1, 0, 0 }, dy[] = { 0, 0, -1, 1 } ์ ๋ณธ ์ ์ด ์๋ค. ๋ค์ ์ฐพ์์ ์ ์ฉํด๋ณด๋ ์ฝ๋๊ฐ ์ด๋ ๊ฒ ๊น๋ํด์ง ์๊ฐ ์๋ค! ์ํ์ข์ฐ 4 ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋ํ์ ๋ ๊ทธ ์นธ์ด ์ ํจํ ์นธ์ธ์ง๋ฅผ ์ฒดํฌํ๊ณ , ์ ํจํ๋ฉฐ ๋ด๊ฐ ๊ฐ ์ ์๋(=1์ผ๋) ๊ธธ์ด๋ผ๋ฉด ๋ค์์ ๊ฐ๋ณผ ์ ์๋๋ก ํ์ ์ถ๊ฐํ๋ค. ์ด๋ ๊ฒ ๋ชจ๋ ์นธ์ ๋ํด ์ํ์ข์ฐ๋ฅผ ๊ณ ๋ คํด ์ด๋ํ๋ฏ๋ก BFS(๋๋น์ฐ์ ํ์)๋ฅผ ์ด์ฉํ๋ค.
#include <iostream>
#include <queue>
using namespace std;
int N, M;
int dx[] = {-1, 1, 0, 0}; // ์ข, ์ฐ, ์, ํ
int dy[] = {0, 0, -1, 1};
void BFS(int G[101][101]) {
// start : maze[0][0]
// end : maze[N-1][M-1]
int isMarked[101 * 101] = {false};
int isinQueue[101 * 101] = {false};
queue<pair<int, int>> q;
q.push(make_pair(0, 0));
while(!q.empty()) {
int cur_x = q.front().first;
int cur_y = q.front().second;
q.pop();
for(int i = 0; i < 4; i++) {
int nx = cur_x + dx[i];
int ny = cur_y + dy[i];
if(nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
if(G[nx][ny] == 0) continue;
if(G[nx][ny] == 1) {
G[nx][ny] = G[cur_x][cur_y] + 1;
q.push(make_pair(nx, ny));
}
}
}
// ๋ด๊ฐ ์๋ํ๋ ๊ธธ ์ถ๋ ฅ
// for(int i = 0; i < N; i++) {
// for(int j = 0; j < M; j++) {
// cout << G[i][j] << ' ';
// }
// cout << '\n';
// }
cout << G[N - 1][M - 1];
}
int main()
{
cin >> N >> M;
int maze[101][101] = {0};
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
scanf("%1d", &maze[i][j]);
}
}
BFS(maze);
return 0;
}
๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ ๊ฐ์ด ์ฌ ๊ฑฐ ๊ฐ๋ค
'Problem Solving > BOJ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 10026๋ฒ ์ ๋ก์์ฝ (C++ ์ฝ๋) (0) | 2021.01.23 |
---|---|
[BOJ] ๋ฐฑ์ค 1012๋ฒ ์ ๊ธฐ๋ ๋ฐฐ์ถ (C++ ์ฝ๋) (0) | 2021.01.23 |
[BOJ] ๋ฐฑ์ค 2644๋ฒ ์ด์๊ณ์ฐ (C++ ์ฝ๋) (0) | 2021.01.22 |
[BOJ] ์ ์ถ๋ ฅ๋ฌธ์ - getline, cin, %1d (0) | 2021.01.13 |
[BOJ] C++ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด (3) (0) | 2021.01.12 |