https://school.programmers.co.kr/learn/courses/30/lessons/169199
λ¬Έμ
- 격μλͺ¨μ κ²μν μμμ λ§μ μμ§μ΄λλ°, μμ μμΉμμ λͺ©ν μμΉκΉμ§ μ΅μ λͺ λ²λ§μ λλ¬ν μ μλμ§
- μ, ν, μ’, μ° 4λ°©ν₯ μ€ νλλ₯Ό μ νν΄μ κ²μν μμ μ₯μ λ¬Όμ΄λ 맨 λμ λΆλͺν λκΉμ§ λ―Έλλ¬μ Έ μ΄λνλ κ²μ ν λ²μ μ΄λμΌλ‘ μΉ©λλ€
- μ€κ°μ Gκ° λμλ μ₯μ λ¬Όμ΄ μλλ―λ‘ κ·Έλ₯ μ§λμΉκ² λ¨ (λ¬Έμ μλ μ΄ λ§μ΄ μμ΄μ μ²μμ μ΄κ±° μ΄ν΄ λͺ»νμ)
- "."μ λΉ κ³΅κ°μ, "R"μ λ‘λ΄μ μ²μ μμΉλ₯Ό, "D"λ μ₯μ λ¬Όμ μμΉλ₯Ό, "G"λ λͺ©νμ§μ
- 보λκ²μν μμ
...D..R
.D.G...
....D.D
D....D.
..D....
"R" μμΉμμ μλ, μΌμͺ½, μ, μΌμͺ½, μλ, μ€λ₯Έμͺ½, μ μμλ‘ μμ§μ΄λ©΄ 7λ² λ§μ "G" μμΉμ λ©μΆ° μ€ μ μλ€
νμ΄
- λ¬Έμ μ΄ν΄νκΈ°
μ²μμ λ¬Έμ λ₯Ό μ½κ³ μμλ₯Ό 보며 λͺ λ² μμ§μ¬μΌ νλμ§ μμλ΄€λ€. νμ§λ§ μ 7λ²μ μμ§μ¬μΌ νλμ§ μ΄ν΄νμ§ λͺ»νλ€.
'R μμΉμμ μλ, μΌμͺ½' μ΄λ κ² μμ§μ΄λ©΄ 2λ²λ§μ Gλ₯Ό μμ§μΌ μ μλ κ²μ΄ μλκ°? λμ ν μ΄ν΄κ° μκ°μ μ§λ¬ΈνκΈ° κ²μνμ λ΄€λ€. μμ λμ²λΌ μ΄ν΄λ₯Ό νμ§ λͺ»ν μ¬λμ κ²μκΈμ΄ μμλ€.. https://school.programmers.co.kr/questions/45898
κ²μνμ λ¬λ¦° λκΈμ λ³΄κ³ μ΄ν΄ν μ μμλ€. 2λ²μ§Έμ μΌμͺ½μΌλ‘ μμ§μΌ λ μ₯μ λ¬Όμ΄ μμ΄μ Gλ₯Ό κ·Έλ₯ μ§λμΉλ€λ κ²μ΄μλ€! ν¬μΌλͺ¬μ€ν° 골λλ²μ μ μΌμ맡 κ²μμ΄λ λΉμ·νλ€κ³ νλ€. https://www.youtube.com/watch?v=QqSREKrNSIg
- 격μνμμ μνμ’μ°λ‘ μ΄λμ ν΄ μ΅μ μ΄λ νμλ₯Ό ꡬνλ λ¬Έμ λ‘ κ·Έλν νμ λ¬Έμ μ΄λ€.
- BFS μ¬μ©
- λ§μ μμΉ(ν, μ΄ μ’ν)μ μ΄λ νμλ₯Ό μ μ₯νλ Dot ν΄λμ€
- μνμ’μ° νμμ νλ©° Queueμ Dot μ 보λ₯Ό λ΄κ³ λ°©λ¬Έ 체ν¬
- λͺ©ν μ§μ (G)μ λλ¬νλ©΄ μ΄λ νμ λ°ν
- νκ° μ’ λ£λμμ λ(λͺ©ν μ§μ μ λλ¬ν μ μμ), -1 리ν΄
μμκΉμ§λ§ ꡬννλ©΄ μ νμ μΈ μ΅μ μ΄λ νμλ₯Ό ꡬνλ κ·Έλν νμ λ¬Έμ μ λΉμ·νλ€. νμ§λ§ μ΄λ λΆλΆμμ λ¬λΌμ§λ€.
- μ₯μ λ¬Ό λ§λκ±°λ 맨 λμ λΆλͺν λκΉμ§ λ―Έλλ¬μ Έ μ΄λνκΈ° ꡬν
- while λ¬ΈμΌλ‘ μ’ν λ²μ μμ μκ³ , μ₯μ λ¬Όμ λ§λμ§ μμ λ κΉμ§ λ°©ν₯ κ·Έλλ‘ μ΄λν΄μ£ΌκΈ°
- κ·Έλ¦¬κ³ λ€μ κ·Έ λ°©ν₯μΌλ‘ λ§μ΄λμ€λ₯Ό ν΄μ£ΌκΈ°
μ½λ
import java.util.*;
class Solution {
static char[][] graph; //보λ κ·Έλν
static int N, M; //ν, μ΄ ν¬κΈ°
static boolean[][] visited; //λ°©λ¬Έ μ¬λΆ μ±ν¬
static int[] dx = {-1, 1, 0, 0}; //μνμ’μ°
static int[] dy = {0, 0, -1, 1};
static class Dot {
int x, y, dist; //ν, μ΄, μ΄λ νμ
public Dot(int x, int y, int dist) {
this.x = x;
this.y = y;
this.dist = dist;
}
}
public int solution(String[] board) {
N = board.length;
M = board[0].length();
graph = new char[N][M];
int startX = 0, startY = 0;
for(int i = 0; i < N; i++) {
String str = board[i];
for(int j = 0; j < M; j++) {
graph[i][j] = str.charAt(j);
if(graph[i][j] == 'R') {
startX = i;
startY = j;
}
}
}
visited = new boolean[N][M];
return bfs(startX, startY);
}
public int bfs(int startX, int startY) {
Queue<Dot> queue = new LinkedList<>();
queue.add(new Dot(startX, startY, 0));
visited[startX][startY] = true;
while(!queue.isEmpty()) {
Dot dot = queue.poll();
for(int d = 0; d < 4; d++) {
int nx = dot.x + dx[d];
int ny = dot.y + dy[d];
while((0 <= nx && nx < N && 0 <= ny && ny < M) && (graph[nx][ny] != 'D')) { //μ₯μ λ¬Όμ΄λ 맨 λμ λΆλͺν λκΉμ§ λ―Έλλ¬μ Έ μ΄λ
nx += dx[d];
ny += dy[d];
}
if(graph[nx - dx[d]][ny - dy[d]] == 'G') { //λͺ©ν λλ¬
return dot.dist + 1; //μ΅μ μ΄λ νμ λ°ν
}
//μ΄λν¨
if(!visited[nx - dx[d]][ny - dy[d]]) {
queue.add(new Dot(nx - dx[d], ny - dy[d], dot.dist + 1));
visited[nx - dx[d]][ny - dy[d]] = true;
}
}
}
return -1;
}
}
κ²°κ³Ό
λ°°μ΄μ
- νλ‘κ·Έλλ¨Έμ€λ IDEμμ ν λλ³΄λ€ λλ²κΉ μ΄ μ΄λ ΅κ³ , IndexOutOfBound λλ©΄ μ΄λμ λ¬λμ§ μμλ €μ€μ μλ¬λ₯Ό μ°ΎκΈ° μ΄λ €μ΄ λ Έλ΅μ΄λΌμ μ€μλ₯Ό μ€μ¬μΌ κ² λ€κ³ μκ°νλ€.
'Algorithm > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘κ·Έλλ¨Έμ€ - λ―Έλ‘ νμΆ (0) | 2023.08.02 |
---|---|
νλ‘κ·Έλλ¨Έμ€ - λνμ€ κ²μ (0) | 2023.07.27 |
νλ‘κ·Έλλ¨Έμ€ - κ³Όμ μ§ννκΈ° (0) | 2023.07.26 |
νλ‘κ·Έλλ¨Έμ€ - λͺ¨μ μ¬μ (0) | 2023.07.25 |
νλ‘κ·Έλλ¨Έμ€ - μ격 μμ€ν (0) | 2023.07.17 |