https://school.programmers.co.kr/learn/courses/30/lessons/1844
๋ฌธ์ ์ค๋ช
ROR ๊ฒ์์ ๋ ํ์ผ๋ก ๋๋์ด์ ์งํํ๋ฉฐ, ์๋ ํ ์ง์์ ๋จผ์ ํ๊ดดํ๋ฉด ์ด๊ธฐ๋ ๊ฒ์์ ๋๋ค. ๋ฐ๋ผ์, ๊ฐ ํ์ ์๋ ํ ์ง์์ ์ต๋ํ ๋นจ๋ฆฌ ๋์ฐฉํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
์ง๊ธ๋ถํฐ ๋น์ ์ ํ ํ์ ํ์์ด ๋์ด ๊ฒ์์ ์งํํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์์ 5 x 5 ํฌ๊ธฐ์ ๋งต์, ๋น์ ์ ์บ๋ฆญํฐ๊ฐ (ํ: 1, ์ด: 1) ์์น์ ์๊ณ , ์๋ ํ ์ง์์ (ํ: 5, ์ด: 5) ์์น์ ์๋ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ ๊ทธ๋ฆผ์์ ๊ฒ์์ ๋ถ๋ถ์ ๋ฒฝ์ผ๋ก ๋งํ์์ด ๊ฐ ์ ์๋ ๊ธธ์ด๋ฉฐ, ํฐ์ ๋ถ๋ถ์ ๊ฐ ์ ์๋ ๊ธธ์ ๋๋ค. ์บ๋ฆญํฐ๊ฐ ์์ง์ผ ๋๋ ๋, ์, ๋จ, ๋ถ ๋ฐฉํฅ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ, ๊ฒ์ ๋งต์ ๋ฒ์ด๋ ๊ธธ์ ๊ฐ ์ ์์ต๋๋ค.์๋ ์์๋ ์บ๋ฆญํฐ๊ฐ ์๋ ํ ์ง์์ผ๋ก ๊ฐ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ๋ด๊ณ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ 11๊ฐ์ ์นธ์ ์ง๋์ ์๋ ํ ์ง์์ ๋์ฐฉํ์ต๋๋ค.
- ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ 15๊ฐ์ ์นธ์ ์ง๋์ ์๋ํ ์ง์์ ๋์ฐฉํ์ต๋๋ค.
์ ์์์์๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์๋ํ ์ง์์ ๋์ฐฉํ๋ ๋ฐฉ๋ฒ์ ์์ผ๋ฏ๋ก, ์ด ๋ฐฉ๋ฒ์ด ์๋ ํ ์ง์์ผ๋ก ๊ฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ง์ฝ, ์๋ ํ์ด ์์ ์ ํ ์ง์ ์ฃผ์์ ๋ฒฝ์ ์ธ์๋์๋ค๋ฉด ์๋ ํ ์ง์์ ๋์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋น์ ์ ์บ๋ฆญํฐ๋ ์๋ ํ ์ง์์ ๋์ฐฉํ ์ ์์ต๋๋ค.
๊ฒ์ ๋งต์ ์ํ maps๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์บ๋ฆญํฐ๊ฐ ์๋ ํ ์ง์์ ๋์ฐฉํ๊ธฐ ์ํด์ ์ง๋๊ฐ์ผ ํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋จ, ์๋ ํ ์ง์์ ๋์ฐฉํ ์ ์์ ๋๋ -1์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ
- maps๋ n x m ํฌ๊ธฐ์ ๊ฒ์ ๋งต์ ์ํ๊ฐ ๋ค์ด์๋ 2์ฐจ์ ๋ฐฐ์ด๋ก, n๊ณผ m์ ๊ฐ๊ฐ 1 ์ด์ 100 ์ดํ์ ์์ฐ์์
๋๋ค.
- n๊ณผ m์ ์๋ก ๊ฐ์ ์๋, ๋ค๋ฅผ ์๋ ์์ง๋ง, n๊ณผ m์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- maps๋ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, 0์ ๋ฒฝ์ด ์๋ ์๋ฆฌ, 1์ ๋ฒฝ์ด ์๋ ์๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค.
- ์ฒ์์ ์บ๋ฆญํฐ๋ ๊ฒ์ ๋งต์ ์ข์ธก ์๋จ์ธ (1, 1) ์์น์ ์์ผ๋ฉฐ, ์๋๋ฐฉ ์ง์์ ๊ฒ์ ๋งต์ ์ฐ์ธก ํ๋จ์ธ (n, m) ์์น์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
maps | answer |
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] | 11 |
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] | -1 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1์ฃผ์ด์ง ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์บ๋ฆญํฐ๊ฐ ์ ํ์ ์ง์๊น์ง ์ด๋ํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๊ธธ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ด 11์นธ์ ์บ๋ฆญํฐ๊ฐ ์ง๋๊ฐ์ผ๋ฏ๋ก 11์ return ํ๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2๋ฌธ์ ์ ์์์ ๊ฐ์ผ๋ฉฐ, ์๋ ํ ์ง์์ ๋๋ฌํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ -1์ return ํฉ๋๋ค.
๋ด ํด๋ต
BFS๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
#include<vector>
#include<queue>
using namespace std;
int solution(vector<vector<int> > maps)
{
int answer = 0;
int N = maps.size();
int M = maps[0].size();
vector<vector<bool>> visit(N, vector<bool>(M, false)); // ๋ฐฉ๋ฌธํ ์ ์๋ ๊ธธ์ด๋ฉด true
vector<vector<int>> route(N, vector<int>(M, 0)); // ์ต๋จ ๊ฒฝ๋ก ์ ์ฅ
queue<pair<int, int>> q;
// 4๋ฐฉํฅ ๊ณ์ฐ์ฉ ๋ฐฐ์ด
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
// ์์์ ๊ฐ ๋ฃ๊ธฐ
q.push(make_pair(0, 0));
visit[0][0] = true;
route[0][0] = 1;
while(!q.empty())
{
// ํ์ฌ ์์น
int x = q.front().first;
int y = q.front().second;
q.pop();
for(int i = 0; i < 4; ++i )
{
// ๋ค์์ ์ด๋ํ ์์น
int nx = x + dx[i];
int ny = y + dy[i];
// ์ด๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ ๊ฒฝ์ฐ continue
if(nx < 0 || nx >= N || ny < 0 || ny >= M)
continue;
// ๋ฐฉ๋ฌธํ์ง ์์ ๊ธธ์ด๋ฉด ๋ฐฉ๋ฌธ
if(maps[nx][ny] && !visit[nx][ny])
{
visit[nx][ny] = true;
q.push(make_pair(nx, ny));
route[nx][ny] = route[x][y]+1;
}
}
}
if(!route[N-1][M-1])
return -1;
else
answer = route[N-1][M-1];
return answer;
}
route[N-1][M-1]์ ๊ฐ์ด ์ต์๊ฐ์์ ๋ณด์ฅํ ์ ์๋ ์ด์ ๋
๋์ฐฉ์ง( (N-1), (M-1) )์ ๊ฐ์ฅ ๋จผ์ ๋์ฐฉํ ๊ฒฝ๋ก๊ฐ visited[N-1][M-1]์ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ๊ธฐ์
๋ค๋ฅธ ๊ฒฝ๋ก๊ฐ ๋ฎ์ด์ธ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์ฌํ๊ฒฝ๋ก(C++) (0) | 2023.04.14 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋จ์ด ๋ณํ(C++) (0) | 2023.04.13 |
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋คํธ์ํฌ(C++) (0) | 2023.04.10 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ํ๊ฒ ๋๋ฒ(C++) (0) | 2023.04.07 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ(C++) (0) | 2023.04.06 |