프로그래머스 L1 - 공원 산책

2024. 3. 23. 18:10알고리즘/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

직관적으로 문제를 읽고 풀면 되지만 알 수 없는 테스트 케이스 실패로 정말 오랜 시간이 걸린 문제이다...

방향 벡터를 활용해서 풀면 쉽게 해결할 수 있다.

function solution(park, routes) {
    const n = park.length;
    const m = park[0].length;
    
    let start;
    for(let i = 0; i<n; i++){
        for(let j = 0; j<m; j++){
            if(park[i][j]==='S') start = [i,j];
        }
    }
    
    const directions = {
        E:[0,1],
        W:[0,-1],
        S:[1,0],
        N:[-1,0],
    };
    
    for(const route of routes){
        const [dir, distanceStr] = route.split(" ");
        let distance = Number(distanceStr);
        let [ny, nx] = start;
        
        let step = 0;
        while(step<distance){
            ny += directions[dir][0];
            nx += directions[dir][1];
            
            if(nx<0||nx>=m||ny<0||ny>=n||park[ny][nx]==='X') break;
            step++;
        }
        if(step===distance) start = [ny, nx];
    }
    return start;
}