문제링크

문제풀이


function solution(maps) {
  let m = maps.length; //세로길이
  let n = maps[0].length; //가로길이
  let dx = [1, 0, -1, 0];
  let dy = [0, -1, 0, 1];
  let ch = Array.from(Array(m), () => Array(n).fill(0)); // 방문했는지 여부 배열
  let dis = Array.from(Array(m), () => Array(n).fill(0)); // 거리 배열
  let queue = []; //큐
  queue.push([0, 0]);
  dis[0][0] = 1;
  ch[0][0] = 1;
  while (queue.length) {
    let [y, x] = queue.shift();
    if (x === n - 1 && y === m - 1) {// 목적지 도달
      break;
    }
    for (let k = 0; k < 4; k++) {// 동서남북 방향 탐색
      let x1 = x + dx[k];
      let y1 = y + dy[k];
      if (
        0 <= x1 &&
        x1 <= n - 1 &&
        0 <= y1 &&
        y1 <= m - 1 &&
        maps[y1][x1] === 1 &&
        ch[y1][x1] === 0
      ) {
        queue.push([y1, x1]);
        dis[y1][x1] = dis[y][x] + 1;
        ch[y1][x1] = 1;
      }
    }
  }
  if (dis[m - 1][n - 1]) {
    return dis[m - 1][n - 1];
  } else {
    return -1; // 목적지 도달x
  }
}
profile
코딩 잘하고 싶음..

0개의 댓글

관련 채용 정보