(JS)프로그래머스 Lv.1 공원산책

김진영·2023년 4월 24일
0

알고리즘

목록 보기
5/7
post-thumbnail

🍀 코드

function solution(park, routes) {
    // 가로와 세로 길이 구하기
    const [width, height] = [park[0].length, park.length];

    // 시작점 구하기
    let start;
    for (let i = 0; i < height; i++) {
        for (let j = 0; j < width; j++) {
            if (park[i][j] === 'S') {
                start = [i, j];
                break;
            }
        }
        if (start) break;
    }

    const directions = {
        N: [-1, 0],
        S: [1, 0],
        W: [0, -1],
        E: [0, 1],
    };

    routes.forEach(route => {
        const [direction, moveNum] = [route.split(' ')[0], +route.split(' ')[1]];
        let [nx, ny] = start;
        let step = 0;

        while (step < moveNum) {
            nx += directions[direction][0];
            ny += directions[direction][1];

            if (nx < 0 || ny < 0 || nx >= height || ny >= width || park[nx][ny] === 'X') break;
            step++;
        }
        
        // 장애물이 존재하지 않으면 실행되는 코드
        if (step === moveNum) start = [nx, ny];
    });

    return start;
}

입력값의 제한은 그다지 신경 쓸 필요가 없습니다.
배열 park와 routes 모두 길이가 50 이하이기 때문입니다.
따라서 이중 for문을 사용해도 무방한 완전탐색 풀이법을 떠올리기로 결정했습니다.

우선 시작점의 좌표를 확인할 필요성을 느꼈습니다.
해당 지점부터 로직이 시작되어야 하기 때문입니다.
시작 좌표를 구한 이후에는 routes 배열을 순회하며 2가지 조건을 따져주면서 최종적으로 위치하게 될 좌표를 구하면 됩니다.

profile
기록해서 남길래요

0개의 댓글