" (๋ฐฑ์ค/c++) 14940 - ์ฌ์ด ์ต๋จ ๊ฑฐ๋ฆฌ / DFS, ๊ทธ๋ํ "
https://www.acmicpc.net/problem/14940
๐ solved.ac ๋์ด๋: ์ค๋ฒ1
์ด ๋ฌธ์ ๋ ์ฝ๊ฒ ํ์ด์ solved.ac์ ๊ฒ์ํด๋ดค๋๋ฐ ์ค๋ฒ 1 ๋ฌธ์ ๋น.. ํ !!!
๋ด ์ค๋ ฅ์ ์์ง ๊ณจ๋5, ์ค๋ฒ1 ์ ๋ ๋๋๊ฑฐ ๊ฐ๋ค ใ ใ ใ
๋์ด ์ฐ์ ๋ฌธ์ ๋ก ์์์ ๋ถํฐ ์ฐฌ์ฐฌํ ๋ํ๊ฐ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
ํญ์ BFS๋ฌธ์ ์์ ์ค์ํ๋ ๋ถ๋ถ์ ๋ค์ ์ง๊ณ ๋์ด๊ฐ๋ ค๊ณ ์์ฑํ๋ค.
que์ ์กฐ๊ฑด์ด ๋๋ ๋ ธ๋๋ฅผ push ํ ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋๊ฑฐ๋ค.
pop ํ๋ฉด์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋๊น ๊ด์ฐฎ์ง ์๋? ์๊ฐํ๋ฉด์ ํญ์ ๋นผ๊ณค ํ๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด E๊ฐ que์์ pop๋๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ธฐ ์ ์ D์์ 'visit false๊ตฐ!!" ํ๋ฉด์ que์ ๋ฃ์ผ๋ฉด์ ๋ฌดํ๋ฃจํ์ ๋น ์ ธ๋ฒ๋ฆฐ๋ค.
#include<iostream>
#include<queue>
#include<array>
using namespace std;
int ArrMap[1001][1001] = { 0, };
int ArrResult[1001][1001] = { 0, };
bool visit[1001][1001] = { false };
pair<int, int> direction[4] = {{ -1, 0}, {1, 0}, { 0, -1}, {0, 1} };
int main(void)
{
int N, M;
cin >> N >> M;
pair<int, int> targetPoint;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
cin >> ArrMap[i][j];
if (ArrMap[i][j] == 2)
{
targetPoint.first = i;
targetPoint.second = j;
}
}
}
queue<pair<int, int>> que;
que.push(make_pair(targetPoint.first, targetPoint.second));
ArrResult[targetPoint.first][targetPoint.second] = 0;
while (!que.empty())
{
auto temp = que.front();
visit[temp.first][temp.second] = true;
que.pop();
for (int i = 0; i < 4; ++i)
{
int X = temp.first + direction[i].first;
int Y = temp.second + direction[i].second;
if (ArrMap[X][Y] == 0)
{
continue;
}
else if (X >= 0 && X < N && Y >= 0 && Y <M && visit[X][Y] == false)
{
ArrResult[X][Y] = ArrResult[temp.first][temp.second] + 1;
visit[X][Y] = true;
que.push(make_pair(X, Y));
}
}
}
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
if (i == targetPoint.first && j == targetPoint.second)
{
cout << 0 << " ";
}
else if (ArrResult[i][j] == 0 && ArrMap[i][j] != 0 )
{
cout << -1 << " ";
}
else
{
cout << ArrResult[i][j] << " ";
}
}
cout << endl;
}
return 0;
}
'๐ coding test > โฝ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!