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;
}
반응형
'🔥 Javascript > 🔸 알고리즘' 카테고리의 다른 글
Javascript ) 프로그래머스 - [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.09.22 |
---|---|
Javascript) 프로그래머스 - 가장 많이 받은 선물 (0) | 2024.09.22 |
Javscript ) 프로그래머스 - [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2024.09.21 |
JavaScript) 프로그래머스 가장 가까운 같은 글자 (0) | 2023.02.01 |
JavaScript) 프로그래머스 크기가 작은 부분문자열 (0) | 2023.01.29 |