문제설명
방문 길이는 주어지는 이동 명령에 맞춰 좌표를 움직였을 때 5x5의 맵 범위를 벗어나지 않고 중복되지 않는 노드의 길이를 반환하는 문제이다.
문제해결
각 노드가 중복되지 않는 조건을 만족하기 위해 Set 자료구조를 사용하기로 했다.
#### Set
또한 두 좌표에서 노드가 생성될 때 양방향의 값을 저장하여 중복을 방지하는 방법으로 진행했다.
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;
}
![[Algorithm] 방문 길이](https://www.notion.so/images/page-cover/gradients_8.png)