https://school.programmers.co.kr/learn/courses/30/lessons/172928
const bfs = (i ,j, routes, park)=> {
const delta = {
N : [-1,0],
S : [1,0],
W : [0,-1],
E : [0,1]
}
// [1]. routes 하나씩 뽑으면서 반복문
while(routes.length > 0) {
const [op, n] = routes.shift().split(' ')
let [di, dj] = delta[op]
let flag = true
// [2]. 방향대로 한칸씩 움직이면서 유효하지 않은 명령이면 종료
for (let k=1; k <= +n; k++) {
const [ni, nj] = [i + di * k, j + dj * k];
// [2-1]. JS에서는 index가 배열의 범위를 넘어가면 undefined가 할당되기 때문에,
// 이런 식으로 조건문을 설정하는 것이 가능합니다.
if (!park[ni] || !park[ni][nj] || park[ni][nj] === 'X') {
flag = false
break
}
}
// [3]. 유효한 명령이었으면 이동
if (flag) {
i += di * +n
j += dj * +n
}
}
return [i, j]
}
function solution(park, routes) {
var answer = [];
const row = park.length;
const col = park[0].length
for (let i=0; i<row; i++) {
for (let j=0; j<col; j++) {
if (park[i][j]==='S') {
return bfs(i, j, routes, park)
}
}
}
}
if (!array[ni] || !array[ni][nj] || array[ni][nj] === 'X') {
// visited 처리, 재귀호출 등등 실행할 로직..
}