🔥 Javascript/🔸 알고리즘
Javascript) 공원산책
Liebe97
2024. 10. 11. 08:52
function solution(park, routes) {
// 공원 벗어나거나 장애물을 만나면 다음 명령 실행
// 마지막 [세로 방향 좌표, 가로 방향 좌표] 위치 리턴
const height = park.length;
const width = park[0].length;
let start = [];
for(let idx in park) {
if (park[idx].indexOf('S') >= 0) {
start = [Number(idx), park[idx].indexOf('S')];
break;
}
}
const getLocation = ( route, locate ) => {
const [ way, move ] = route.split(' ');
let moveL = locate; // 움직인 위치
let moveW = {
N: [-1, 0],
S: [1, 0],
W: [0, -1],
E: [0, 1],
}
moveL = [locate[0] + (moveW[way][0] * move), locate[1] + (moveW[way][1] * move)];
let isStop = false;
if (moveL[0] < 0 || moveL[1] < 0 || width - 1 < moveL[1] || height - 1 < moveL[0]) { // 공원 벗어났는지 체크
isStop = true;
} else if (way === 'N') { // 장애물 체크
isStop = park.slice(moveL[0], locate[0]).some((item) => item[locate[1]] === 'X');
} else if (way === 'S') {
isStop = park.slice(locate[0] + moveW[way][0], moveL[0] + 1).some((item) => item[locate[1]] === 'X');
} else if (way === 'W') {
isStop = park[moveL[0]].slice(moveL[1], locate[1]).includes('X');
} else if (way === 'E') {
isStop = park[moveL[0]].slice(locate[1] + moveW[way][1], moveL[1] + 1).includes('X');
}
return isStop ? locate : moveL;
}
let locate = start;
routes.forEach((route) => locate = getLocation(route, locate));
return locate;
}
반응형