12日目
16893 ワード
プログラマ
質問:ゲームマップ最短距離
12日目にプログラマーの質問に答えました.
難しすぎます...このような問題のタイプは弱いようだ.
もう少し焼きます
しかもついつい解決してしまう問題が3桁になってしまいました!
もっと入れて
質問の説明は次のリンクです.
https://programmers.co.kr/learn/courses/30/lessons/1844?language=java
に答える
使用言語しようげんご:java java
import java.util.LinkedList;
import java.util.Queue;
class Solution {
// 상하좌우
private static final int[] dx = {0, 0, -1, 1};
private static final int[] dy = {-1, 1, 0, 0};
private static int m;
private static int n;
private static boolean[][] visited;
public static int solution(int[][] maps) {
m = maps.length;
n = maps[0].length;
visited = new boolean[m][n];
visited[0][0] = true;
return bfs(0, 0, maps);
}
private static int bfs(int x, int y, int[][] maps) {
Queue<Node> queue = new LinkedList<>();
queue.offer(new Node(x, y, 1));
visited[x][y] = true;
while (!queue.isEmpty()) {
Node node = queue.poll();
if (node.getX() == maps.length - 1 && node.getY() == maps[0].length) {
return node.getCount();
}
for (int i = 0; i < 4; i++) {
int nx = node.getX() + dx[i];
int ny = node.getY() + dy[i];
if (nx == m - 1 && ny == n - 1) {
return node.getCount() + 1;
}
if (nx >= 0 && ny >= 0 && nx < m && ny < n && maps[nx][ny]==1 && !visited[nx][ny]) {
queue.add(new Node(nx, ny, node.getCount() + 1));
visited[nx][ny] = true;
}
}
}
return -1;
}
public static class Node {
private int x;
private int y;
private int count;
public Node(int x, int y, int count) {
this.x = x;
this.y = y;
this.count = count;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getCount() {
return count;
}
}
}
Reference
この問題について(12日目), 我々は、より多くの情報をここで見つけました https://velog.io/@myhouse34/12일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol