-
[프로그래머스/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로 푼 풀이
'코딩테스트' 카테고리의 다른 글
[프로그래머스/javascript] 2개이하의 다른 비트 (꼭 다시풀기) (0) 2023.03.08 [프로그래머스/javascript] 2Xn 파일링 (0) 2023.03.08 [프로그래머스/javascript] 프렌즈 4블록(못풀었다..꼭 다시풀기) (0) 2023.03.07 [프로그래머스/javascript] 파일명 정렬 (정규식 공부하고 다시풀기,sort 객체 사용법 공부) (0) 2023.03.04 [프로그래머스/javascript] 오픈채팅방 (다시 풀어보기) (0) 2023.03.03