핵심 아이디어
- 현재 위치를 추적하기 위해 currentPath 배열을 사용하며, 초기값은 (0, 0)으로 설정된다.
- 입력된 문자열 dirs를 순회하며 각 방향(U, D, L, R)에 따라 현재 위치를 업데이트한다. 방향에 따라 y 좌표를 증가 또는 감소시키거나, x 좌표를 증가 또는 감소시킨다.
- 새로운 위치가 (-5, -5)와 (5, 5) 경계를 넘어가지 않도록 검증하고, 경계를 넘으면 해당 이동을 무시한다.
- 이동 전의 좌표와 이동 후의 좌표를 기반으로 형식을 지정해 경로를 문자열 형태로 만든다. 이 경로는 최소값과 최대값을 사용해 형식화된다.
- 생성된 경로 문자열이 paths 배열에 포함되어 있지 않으면 추가해 중복된 경로를 피한다.
- 마지막으로 paths 배열의 길이를 반환해 고유한 경로의 개수를 나타낸다.
정답
function solution(dirs) {
let currentPath = [0, 0];
const paths = [];
for (const dir of dirs) {
const x = currentPath[0];
const y = currentPath[1];
let newX = x;
let newY = y;
if (dir === "U") newY += 1;
if (dir === "D") newY -= 1;
if (dir === "L") newX -= 1;
if (dir === "R") newX += 1;
if (newX > 5 || newX < -5 || newY > 5 || newY < -5) continue;
const formattedPath = `${Math.min(x, newX)}, ${Math.min(y, newY)}, ${Math.max(
x,
newX
)}, ${Math.max(y, newY)}
`;
if (!paths.includes(formattedPath)) paths.push(formattedPath);
currentPath = [newX, newY];
}
return paths.length;
}
핵심 아이디어
- 현재 위치를 추적하기 위해 currentPath 배열을 사용하며, 초기값은 (0, 0)으로 설정된다.
- 입력된 문자열 dirs를 순회하며 각 방향(U, D, L, R)에 따라 현재 위치를 업데이트한다. 방향에 따라 y 좌표를 증가 또는 감소시키거나, x 좌표를 증가 또는 감소시킨다.
- 새로운 위치가 (-5, -5)와 (5, 5) 경계를 넘어가지 않도록 검증하고, 경계를 넘으면 해당 이동을 무시한다.
- 이동 전의 좌표와 이동 후의 좌표를 기반으로 형식을 지정해 경로를 문자열 형태로 만든다. 이 경로는 최소값과 최대값을 사용해 형식화된다.
- 생성된 경로 문자열이 paths 배열에 포함되어 있지 않으면 추가해 중복된 경로를 피한다.
- 마지막으로 paths 배열의 길이를 반환해 고유한 경로의 개수를 나타낸다.
정답
function solution(dirs) {
let currentPath = [0, 0];
const paths = [];
for (const dir of dirs) {
const x = currentPath[0];
const y = currentPath[1];
let newX = x;
let newY = y;
if (dir === "U") newY += 1;
if (dir === "D") newY -= 1;
if (dir === "L") newX -= 1;
if (dir === "R") newX += 1;
if (newX > 5 || newX < -5 || newY > 5 || newY < -5) continue;
const formattedPath = `${Math.min(x, newX)}, ${Math.min(y, newY)}, ${Math.max(
x,
newX
)}, ${Math.max(y, newY)}
`;
if (!paths.includes(formattedPath)) paths.push(formattedPath);
currentPath = [newX, newY];
}
return paths.length;
}