ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스/JavaScript] 방문 길이 (Level 2)
    코딩테스트/그래프 2021. 6. 12. 15:10

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

     

    코딩테스트 연습 - 방문 길이

     

    programmers.co.kr


    1. 문제 설명

    • 위 링크 참고

    2. 문제 풀이

    • 방문한 좌표 목록을 관리하고 방문 여부는 이동전에서 이동후의 간선(edge)으로 판단을 해야함
    • 방문한 좌표 목록은 [이동전index, 이동후index]로 관리를 하고 index는 좌측 위부터 0으로 판단
    • find 메소드를 사용하여 방문여부 확인
    • 방문을 하지 않은 경우 count를 증가시키고 방문한 좌표 목록에 추가
    function solution(dirs) {
        let count = 0;
    
        const moveObj = {
            "U": [0, 1],
            "D": [0, -1],
            "R": [1, 0],
            "L": [-1, 0]
        }
    
        let pos = [0,0];    // 현재위치
        const visited = [];    // 방문한 좌표 목록
    
        for(let i = 0, len = dirs.length; i < len; i++) {
            const moveValue = moveObj[dirs[i]];
            const move = [pos[0] + moveValue[0], pos[1] + moveValue[1]];    // 이동할 좌표
    
              // 좌표평면의 경계를 넘어가는 경우
            if(move[0] > 5 || move[0] < -5 || move[1] > 5 || move[1] < -5) {
                continue;
            }
    
            const startIndex = (5+pos[0]) + (5-pos[1]) * 11;    // 이동전 좌표
            const endIndex = (5+move[0]) + (5-move[1]) * 11;    // 이동후 좌표
    
            pos = move;
    
              // 방문여부 확인
            const isVisited = visited.find((item) => {
                if( (item[0] === startIndex && item[1] === endIndex)
                   || (item[0] === endIndex && item[1] === startIndex) ) {
                    return true;
                }
            })
    
            if( !isVisited ) {
                ++count;
                visited.push([startIndex, endIndex]);
            }
        }
    
        return count;
    }

    댓글

Designed by Tistory.