코딩테스트
[프로그래머스/javascript] 게임맵 최단거리 (시간나면 다시풀기)
_서리__
2023. 3. 7. 14:34
function solution(maps) {
var answer = 0;
const n =maps.length;
const m = maps[0].length;
let dy =[-1,1,0,0]
let dx = [0,0,-1,1]
let queue = [[0,0]]
let visited = {};
let result = [];
let counted = [];
function dfs(current,count){
if(current[0]===n-1&¤t[1]===m-1) counted.push(count)
visited[current] = true;
result.push(current)
for(let i=0;i<4;i++){
let ny = current[0]+dy[i]
let nx = current[1]+dx[i]
if(ny>=0&&nx>=0&&ny<n&&nx<m&& maps[ny][nx]===1&&!visited[[ny,nx]]){
visited[[ny,nx]] = true;
dfs([ny,nx],count+1);
visited[[ny,nx]] = false;
}
}
}
dfs([0,0],1)
처음에 dfs로 풀었는데 답은 맞았지만 런타임에러가 떴다. 최단거리는 bfs로 풀어야한다는 것은 알고 있었는데....
bfs로 어떻게 풀어야 할지 감이 잡히지 않아 dfs로 풀었었다.
function solution(maps) {
var answer = 0;
const n =maps.length;
const m = maps[0].length;
let dy =[-1,1,0,0]
let dx = [0,0,-1,1]
let queue = [[0,0,1]]
let visited = {};
while(queue.length!==0){
let [x,y,count] = queue.shift();
let current = [x,y];
if(current[0]===n-1&¤t[1]===m-1) return count
visited[current] = true;
for(let i=0;i<4;i++){
let ny = current[0]+dy[i]
let nx = current[1]+dx[i]
if(ny>=0&&nx>=0&&ny<n&&nx<m&& maps[ny][nx]===1&&!visited[[ny,nx]]){
queue.push([ny,nx,count+1])
visited[[ny,nx]] = true;
}
}
}
return -1
}
bfs로 푼 풀이