[프로그래머스] 방문 길이

Narcoker·2022년 12월 12일
0

코딩테스트

목록 보기
73/150

문제

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

풀이

현재 위치를 curX, curY 에 저장한다.
입력값을 순회하면서 이동한다.

입력 타입에 따라 다음 위치를 구한다.
만약 다음 위치가 좌표상에 존재하고 처음 가는 경로라면 log Set에 저장하고
다음 위치를 반환한다.
log 에 저장된 데이터 타입은 1,2->1,3 이다.

처음 가는 경로인지 확인 할때는 양뱡향으로 확인해줘야하므로 뒤집어서도 확인한다.

그렇지 않으면 현재 경로를 그대로 반환한다.

모든 순회가 끝나면 log size를 반환한다.

function solution(dirs) {
    function move(y, x, type) {
        // x,y
        const moveTypes = {
            U: [0, 1],
            D: [0, -1],
            L: [-1, 0],
            R: [1, 0]
        };
        let nextX = x + moveTypes[type][0];
        let nextY = y + moveTypes[type][1];;

        if (nextY >= -5 && nextY <= 5 && nextX >= -5 && nextX <= 5) {
            if (!log.has(`${x},${y}->${nextX},${nextY}`) && !log.has(`${nextX},${nextY}->${x},${y}`)) {
                log.add(`${x},${y}->${nextX},${nextY}`)
            }
            return [nextX, nextY];
        }
        return [x, y];
    }

    let log = new Set();
    let curX = 0, curY = 0;
    for (let type of dirs) {
        [curY, curX] = move(curX, curY, type);
    }

    return log.size;
}
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글