Javascript) 공원산책
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;
}
반응형