[JavaScript][Programmers] 방문 길이

조준형·2021년 8월 12일
0

Algorithm

목록 보기
65/142
post-thumbnail

🔎 방문 길이

❓ 문제링크

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

📄 제출 코드

function solution(dirs) {
    let move = { U: [0, 1], D: [0, -1], L: [-1, 0], R: [1, 0] };
    let cur = [0, 0];
    let route = new Set();
    let answer = 0;
    for (let i = 0; i < dirs.length; i++) {
        let idx = dirs[i];
        let nx = cur[0] + move[idx][0];
        let ny = cur[1] + move[idx][1];
        if (nx >= -5 && ny >= -5 && nx <= 5 && ny <= 5) {
            route.add(`${cur[0]}${cur[1]}${nx}${ny}`);
            route.add(`${nx}${ny}${cur[0]}${cur[1]}`);
            cur = [nx,ny]
        }
        answer = route.size/2;
    }

    return answer;
}
let dirs = "ULURRDLLU";
console.log(solution(dirs));

처음에 10x10크기의 map을 그려서 UDLR에 따라 좌표를 이동해가면서 값을 찾으려고했는데 생각 하다보니까 굳이 map을 그릴것 까진 없을 거 같았다.
그래서 move에 대한 이동좌표값을 객체로 만들어 놓고, 좌표의 이동을 보려고했는데 중복체크를 어떻게 해야할지 고민이 였다.

고민을 하다가 다른사람의 코드를 보게되었는데 Set을 이용해 길이에 대한 두 점좌표를 저장해 중복을 체크 하는 것을 보았다.
(만약 0,0에서 U이면 위로 이동한 길은 [0,0][0,1]을 지났으니까 [0,1]에서 [0,0]으로 오는 것도 중복하면 안되기 때문에 0001, 0100 route에 넣어준다.)

dir만큼 반복하다가 map범위안이면 현재x,y이동x,y를 route에 저장.
이동x,y 현재x,y를 저장하고, 현재 좌표는 이동한 좌표로 변경한다.
반복을 완료하고, route에 저장할 당시 2번씩 저장했으니까 /2한 값으로 답을 도출하면 정답이 나온다.

📘 참고

https://after-newmoon.tistory.com/92

profile
깃허브 : github.com/JuneHyung

0개의 댓글