알고리즘
[프로그래머스] PGS - 게임 맵 최단거리
애용쓰
2023. 4. 22. 02:20
https://school.programmers.co.kr/learn/courses/30/lessons/1844#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
import java.io.*;
class Solution {
static class Point{
int x;
int y;
Point(int x, int y){
this.x = x;
this.y = y;
}
}
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static int[][] visited;
static int N, M;
static Queue<Point> queue;
static int answer;
static boolean isIn(int x, int y){
if(x<0||x>N-1||y<0||y>M-1) return false;
return true;
}
static void bfs(int[][] maps, int x, int y){
queue = new LinkedList<>();
queue.add(new Point(x,y));
visited[x][y] = 1;
while(!queue.isEmpty()){
Point tmp = queue.poll();
for(int d=0;d<4;d++){
int nx = tmp.x+dx[d];
int ny = tmp.y+dy[d];
if(!isIn(nx,ny)) continue;
if(visited[nx][ny]==0&&maps[nx][ny]==1){
visited[nx][ny]=visited[tmp.x][tmp.y]+1;
queue.add(new Point(nx,ny));
}
}
}
}
public int solution(int[][] maps) {
answer = 0;
N = maps.length;
M = maps[0].length;
visited = new int[N][M];
bfs(maps, 0, 0);
answer = visited[N-1][M-1];
if(answer==0) answer = -1;
return answer;
}
}
기본적인 bfs 문제이다. 방문체크를 해줌과 동시에 거리를 기록해준다.