[Algorithm] 방문 길이
공부

[Algorithm] 방문 길이

작성일: 2023년 11월 13일

문제설명

방문 길이는 주어지는 이동 명령에 맞춰 좌표를 움직였을 때 5x5의 맵 범위를 벗어나지 않고 중복되지 않는 노드의 길이를 반환하는 문제이다.

문제해결

각 노드가 중복되지 않는 조건을 만족하기 위해 Set 자료구조를 사용하기로 했다.

#### Set
  • 중복이 허용되지 않음
  • 순서 상관없음
  • add,delete,has,size,for..of,forEach(callback) 등의 메서드 및 반복구조
  • 또한 두 좌표에서 노드가 생성될 때 양방향의 값을 저장하여 중복을 방지하는 방법으로 진행했다.

    function solution(dirs) {
      // 각 명령에 따라 이동할 좌표 생성
        const move = {
            'U':[0,1],
            'D':[0,-1],
            'L':[-1,0],
            'R':[1,0]
        }
        // 이동할 좌표의 초기값
        let node = [0,0];
      // 이동한 노드를 저장할 자료구조
        let visited = new Set();
        for (let dir of dirs) {
            let [x,y] = node,
                [dx,dy] = move[dir],
                nx = x + dx,
                ny = y + dy; 
          // 이동한 좌표가 맵의 넓이를 벗어나면 노드를 저장하지 않음
            if (nx > 5 || nx < -5 || ny > 5 || ny < -5) continue;
            // 양방향의 노드 저장
            visited.add(`${x}${y}${nx}${ny}`);
            visited.add(`${nx}${ny}${x}${y}`);
            // 현재 좌표 갱신
            node = [nx, ny];
            }
      	// dirs를 순회하며 양방향을 저장했기 때문에 한방향만 계산해준다
        return visited.size / 2;
        }