๐
2025-10-27
๊น์ด ์ฐ์ ํ์
ํ ๋ฐฉํฅ์ผ๋ก ๋๊น์ง ๋ค์ด๊ฐ๋ค ๋งํ๋ฉด ๋๋์์ค๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
Stack์ด๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
Last In First Out ๊ตฌ์กฐ
์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋๋น ์ฐ์ ํ์
์์์ ์์๋ถํฐ ๊ฐ์ ๋ ๋ฒจ์ ๋ฒ์๋ฅผ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋ค.
Queue๋ฅผ ์ฌ์ฉํ๋ค.
Fisrt In First Out ๊ตฌ์กฐ
์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ฌธ์ ๋งํฌ
๋ฌธ์ ์ค๋ช
1 x 1 ํฌ๊ธฐ์ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง ์ง์ฌ๊ฐํ ๊ฒฉ์ ํํ์ ๋ฏธ๋ก์์ ํ์ถํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ ์นธ์ ํต๋ก ๋๋ ๋ฒฝ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฒฝ์ผ๋ก ๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ ํต๋ก๋ก ๋ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์์ต๋๋ค. ํต๋ก๋ค ์ค ํ ์นธ์๋ ๋ฏธ๋ก๋ฅผ ๋น ์ ธ๋๊ฐ๋ ๋ฌธ์ด ์๋๋ฐ, ์ด ๋ฌธ์ ๋ ๋ฒ๋ฅผ ๋น๊ฒจ์๋ง ์ด ์ ์์ต๋๋ค. ๋ ๋ฒ ๋ํ ํต๋ก๋ค ์ค ํ ์นธ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ์ถ๋ฐ ์ง์ ์์ ๋จผ์ ๋ ๋ฒ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ์ฌ ๋ ๋ฒ๋ฅผ ๋น๊ธด ํ ๋ฏธ๋ก๋ฅผ ๋น ์ ธ๋๊ฐ๋ ๋ฌธ์ด ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ์์ง ๋ ๋ฒ๋ฅผ ๋น๊ธฐ์ง ์์๋๋ผ๋ ์ถ๊ตฌ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์์ต๋๋ค. ๋ฏธ๋ก์์ ํ ์นธ์ ์ด๋ํ๋๋ฐ 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ํ ๋, ์ต๋ํ ๋น ๋ฅด๊ฒ ๋ฏธ๋ก๋ฅผ ๋น ์ ธ๋๊ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ตฌํ๋ ค ํฉ๋๋ค.
๋ฏธ๋ก๋ฅผ ๋ํ๋ธ ๋ฌธ์์ด ๋ฐฐ์ด maps๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฏธ๋ก๋ฅผ ํ์ถํ๋๋ฐ ํ์ํ ์ต์ ์๊ฐ์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ง์ฝ, ํ์ถํ ์ ์๋ค๋ฉด -1์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ
DFS๋ก ํ์๋ค๊ฐ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์ฅํ์ง ์๋ ๋ฌธ์ ๋๋ฌธ์ BFS๋ก ์์ ํ๊ณ ๋ ๋ฒ๋ฅผ ์ฐพ๊ณ ๊ธธ์ ๋๋์ ๊ฐ์ผํ๋ ๊ฒฝ์ฐ๋ฅผ ์ํด ๊ฒฝ๋ก ํ์์ 2๋ฒ์ผ๋ก ๋๋ด๋ค.
#include <string>
#include <vector>
#include <queue>
using namespace std;
struct Point
{
int y;
int x;
int dist;
};
int bfs(int y, int x, char c, vector<string>& maps)
{
queue<Point> q;
vector<vector<bool>> visited(maps.size(),vector<bool>(maps[0].size()));
q.push({y,x,0});
visited[y][x] = true;
int dy[]={-1,1,0,0};
int dx[]={0,0,-1,1};
while(!q.empty())
{
Point temp = q.front();
q.pop();
if(maps[temp.y][temp.x] == c)
{
return temp.dist;
}
for(int i=0; i<4; i++)
{
int tempY = temp.y+dy[i];
int tempX = temp.x+dx[i];
if(tempY>=0 && tempY<maps.size() && tempX>=0 && tempX<maps[0].size()
&& !visited[tempY][tempX]
&& maps[tempY][tempX] != 'X')
{
visited[tempY][tempX] = true;
q.push({tempY, tempX, temp.dist+1});
}
}
}
return -1;
}
int solution(vector<string> maps) {
int answer = 0;
vector<int> start(2,0);
vector<int> lever(2,0);
for(int i=0; i<maps.size(); i++)
{
for(int j=0; j<maps[0].size(); j++)
{
if(maps[i][j]=='S') start={i,j};
if(maps[i][j]=='L') lever={i,j};
}
}
int temp = 0;
temp = bfs(start[0],start[1],'L', maps);
if(temp==-1) return -1;
answer += temp;
temp = bfs(lever[0],lever[1],'E', maps);
if(temp==-1) return -1;
answer += temp;
return answer;
}
๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ ๋จผ์ ๊ณจ๋ผ์ผ๊ฒ ๋ค.
์ถ์ฒ ํ๋ก๊ทธ๋๋จธ์ค: ๋ฏธ๋กํ์ถ