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 반환
}