[프로그래머스] 게임 맵 최단거리 - JS

잡초·2024년 1월 10일
0
post-thumbnail

문제

풀이

function solution(maps) {
  let answer = 1; // 최단 경로의 길이를 나타내는 변수 초기화

  let visited = maps; // 방문 여부를 나타내는 2D 배열 초기화
  let queue = []; // BFS에서 사용할 큐 초기화

  const dx = [-1, 1, 0, 0]; // 상하좌우로 이동하기 위한 방향 정의
  const dy = [0, 0, -1, 1];

  const n = maps.length; // 행 개수
  const m = maps[0].length; // 열 개수

  queue.push([0, 0]); // 시작 지점을 큐에 추가
  visited[0][0] = 0; // 시작 지점 방문 표시

  while (queue.length > 0) { // 큐가 비어있지 않은 동안 반복
      let size = queue.length; // 현재 큐의 크기 저장

      for (let i = 0; i < size; i++) { // 현재 큐에 있는 모든 지점에 대해 반복
          let [x, y] = queue.shift(); // 큐에서 지점 추출

          for (let j = 0; j < 4; j++) { // 상하좌우로 이동하는 경우에 대해 반복
              let nx = x + dx[j]; // 이동한 지점의 좌표 계산
              let ny = y + dy[j];

              if (nx >= 0 && nx < n && ny >= 0 && ny < m && visited[nx][ny] === 1) {
                  // 새로운 지점이 유효하고 방문하지 않은 지점인 경우
                  if (nx == n - 1 && ny == m - 1) { // 도착 지점에 도달한 경우
                      return ++answer; // 현재까지의 경로 길이에 1을 더한 값을 반환
                  }

                  queue.push([nx, ny]); // 새로운 지점을 큐에 추가
                  visited[nx][ny] = 0; // 새로운 지점 방문 표시
              }
          }
      }
      answer++; // 현재 위치에서 상하좌우로 이동이 끝날 때마다 경로의 길이를 1 증가
  }

  return -1; // 도착 지점에 도달할 수 없는 경우 -1 반환
}
profile
개발자가 되고싶은 잡초

0개의 댓글