Algorithm problem-25
11435 ワード
const robotPath = function (room, src, dst) {
// room에 위치한 1의 값을 임의의 텍스트 값('')으로 교체
for (let i = 0; i < room.length; i++) {
for (let j = 0; j < room[i].length; j++) {
if (room[i][j] === 1) {
room[i][j] = '';
}
}
}
// src의 값을 's'로 변경
let [r,c] = src;
room[r][c] = 's';
// 모든 배열의 값이 0이 아닐때까지 변경, 그러기 위한 배열의 0의 수를 카운트 하는 함수를 작성
let cnt = 0;
// 시작점에서 출발하며 상하좌우의 위치가 유효하다면, 값을 +1씩 바꾼다
};
const robotPath = function (room, src, dst) {
// 현재 위치를 중심으로 4방향의 값을 현재값 +1로 바꿔주는 함수를 구현하자
const stepper = (m, n, now, step) => {
// 현재 위치를 좌표값으로 옮겨 담는다
const [r, c] = now;
// 배열의 범위를 벗어난 경우
if (r < 0 || r >= m || c < 0 || c >= n) return;
// 0이거나, 현재 스탭보다 값이 크다면, 현재 스탭값으로 변경시킨다
if (room[r][c] === 0 || room[r][c] > step) {room[r][c] = step;}
// 그 외, 장애물(1)이거나, 현재 스탭보다 작은(최소 시간으로 통과한) 경우
else {return;}
// 4방향을 탐색, dfs로 진행한다, 완전탐색을 진행하므로 bfs도 큰 차이는 없지만
// 도착지에 최소값으로 도달한 경우 종료되게 코드를 작성할 수 있으면 약간 더 효율적임
// 아래의 경우를 재귀하여 탐색하게 되면, 범위 내의 모든 값을 최대 4회씩 퍼져 나가면서 탐색하게 됨
// 종료 시점은 모든 범위 내에서 4회의 시도를 한 경우가 될 것이고, 범위 밖에서는 진행이 되지 않으므로
// 자동적으로 종료가 된다
stepper(m, n, [r + 1, c], step + 1);
stepper(m, n, [r - 1, c], step + 1);
stepper(m, n, [r, c + 1], step + 1);
stepper(m, n, [r, c - 1], step + 1);
};
// 현재 위치의 값을 1로 시작해야 시작점으로 되돌아오지 않는다
// 계산이 완료된 후에, 도착지점의 값에서 -1을 해주면 올바른 값이 된다
stepper(room.length, room[0].length, src, 1);
const [row, col] = dst;
return room[row][col] - 1;
}
Reference
この問題について(Algorithm problem-25), 我々は、より多くの情報をここで見つけました https://velog.io/@ebiny/Algorithm-problem-25テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol