https://school.programmers.co.kr/learn/courses/30/lessons/159993#qna
๋ด ํด๋ต
๋ฌธ์ ์ ๊ทผ์ ์ฝ์ง๋ง, ์๊ฐ ๋ณต์ก๋ ๋๋ฌธ์ ๊ณ ์ํ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ์๋ ‘์ถ๊ตฌ๋ ๋ ๋ฒ๊ฐ ๋น๊ฒจ์ง์ง ์์๋ ์ง๋๊ฐ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ํต๋ก, ์ถ๊ตฌ, ๋ ๋ฒ, ์์์ ์ ์ฌ๋ฌ ๋ฒ ์ง๋๊ฐ ์ ์์ต๋๋ค.’ ๋ผ๊ณ ์ ํ์๋๋ฐ ๋ด ๋ฐฉ์์์๋ ์ด๊ฒ ํจ์ ์ด ๋์๋ค.
๋ชฉ์ ์ง๋ ๋ ๋ฒ์ ์ถ๊ตฌ 2๊ฐ๊ฐ ์๋๋ฐ ๊ฐ ๋ชฉ์ ์ง๊น์ง ๊ฐ๋ ๊ธธ์ ์ฌ๋ฐฉ๋ฌธ์ ์๋๋ค. ๊ทธ๋ฌ๋๊น (์์์ →๋ ๋ฒ) , (๋ ๋ฒ→ ์ถ๊ตฌ) ๊ฒฝ๋ก์ ์ฌ๋ฐฉ๋ฌธ์ ํ์ฉํ๋ฉด ๋๋ฌด ๋๋ฆฌ๋ค.
๋ฐ๋ผ์ (์์์ →๋ ๋ฒ) + (๋ฐฉ๋ฌธ ๊ธฐ๋ก ์ด๊ธฐํ) + (๋ ๋ฒ→ ์ถ๊ตฌ) ์ด๋ฐ ์์ผ๋ก ํด๊ฒฐํ๋ค. ๊ฒฐ๊ตญ ํ๋์ q์์ BFS๋ฅผ ๋ ๋ฒ ๋๋ ํ์์ผ๋ก ํด๊ฒฐํ ๊ฒ์ด๋ค.
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int solution(const vector<string> maps) {
int answer = -1;
vector<vector<int>> visit(maps.size(), vector<int>(maps[0].size(), 0));
queue<pair<int, int>> q;
int start_x = -1, start_y = -1;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
bool lever = false;
// ์์์ ์ฐพ๊ธฐ
for(int y = 0; y < maps.size(); ++y)
{
for(int x = 0; x < maps[0].size(); ++x)
{
if(maps[y][x] == 'S')
{
start_x = x;
start_y = y;
break;
}
}
if(start_x != -1)
break;
}
// q์ ์์์ ์ถ๊ฐ
q.push({start_x, start_y});
while(!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
// ๋ ๋ฒ๊ฐ ์ฌ๋ผ๊ฐ ์ํ์์ ํ์ถ๊ตฌ๋ฅผ ๋ง๋ฌ์ ๋
if(lever && 'E' == maps[y][x] )
{
answer = visit[y][x];
break;
}
// ์์ง ๋ ๋ฒ๊ฐ ์์ฌ๋ผ๊ฐ ์ํ์์ ๋ ๋ฒ๋ฅผ ๋ง๋ฌ์ ๋
else if(!lever && 'L' == maps[y][x])
{
lever = true;
int time = visit[y][x];
// q์ visit ์ด๊ธฐํ
q = queue<pair<int, int>>();
fill(visit.begin(), visit.end(), vector(visit[0].size(), 0));
// lever ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ ์ค์
visit[y][x] = time;
}
// ๋ค์ ๋ฐฉ๋ฌธ์ง ์ฐพ๊ธฐ
for(int i = 0; i < 4; ++i)
{
int nx = x+dx[i];
int ny = y+dy[i];
if(nx >= 0 && ny >= 0 && nx < maps[0].size() && ny < maps.size())
if(maps[ny][nx] != 'X' && visit[ny][nx] == 0)
{
q.push({nx, ny});
visit[ny][nx] = visit[y][x] + 1;
}
}
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ์กฐ์ด์คํฑ(C++) (1) | 2023.06.10 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ(C++) (0) | 2023.06.08 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.3 - ๋จ์ ์นด๋ฉ๋ผ(C++) (0) | 2023.06.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ์๊ฒฉ ์์คํ (C++) (1) | 2023.06.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.3 - ์ด์ค์ฐ์ ์์ํ(C++) (0) | 2023.06.04 |