kakasoo

[node.js] 방문 길이 ( 프로그래머스 레벨2 ) 본문

프로그래밍/알고리즘 풀이

[node.js] 방문 길이 ( 프로그래머스 레벨2 )

카카수(kakasoo) 2021. 7. 2. 14:18
반응형
const solution = (dirs) => {    
    const answer = [];
    let next = { y : 5, x : 5 };

    dirs.split('').forEach((dir) => {
        const cur = next;
        const funcs = { "U" : function (cur) { return { y : cur.y + 1, x : cur.x }; },
                        "D" : function (cur) { return { y : cur.y - 1, x : cur.x }; },
                        "R" : function (cur) { return { y : cur.y, x : cur.x + 1 }; },
                        "L" : function (cur) { return { y : cur.y, x : cur.x - 1 }; },
                      };
        next = funcs[dir](cur);
        if (next.y < 0 || next.y > 10 || next.x < 0 || next.x > 10) {
            next = cur;
        } else {
            const aTob = `${cur.x}${cur.y}${next.x}${next.y}`;
            const bToa = `${next.x}${next.y}${cur.x}${cur.y}`;

            if (!answer.includes(aTob) && !answer.includes(bToa)) {
                answer.push(aTob);
            }   
        }    
    })

    return answer.length;
}

현재 점으로부터 다음 점을 찾는다. UP, DOWN, LEFT, RIGHT 마다 좌표 값을 바꿔주면 된다.
그것을 next 라는 변수에 저장한다.
이 시점에서 cur, next를 알 수 있다.
이동 경로는 그냥 cur.x,cur.y,next.x,next.y를 문자로 치환해서 쭉 이어붙인다.
네 자리 숫자가 될 것이다. ( 마이너스가 끼어 있는 네 자리 숫자가 될 수도 있다. )
이 숫자들이 고유하도록 하면 된다.
따라서, 이미 있는 경우에는 넣지 않는다.
단, cur과 next가 거꾸로 되어 있는 경우에도 같은 도로를 이용해야 하므로 이 부분을 잘 체크해준다.

그래프 밖에 벗어날 경우도 체크해줘야 한다.

반응형