https://school.programmers.co.kr/learn/courses/30/lessons/49994
function isValidMove(x, y){
return x >= -5 && x <= 5 && y >= -5 && y <= 5;
}
function updatedLocations(x, y, dir){
switch(dir){
case 'U':
return [x, y+1];
case 'D':
return [x, y-1];
case 'R':
return [x+1, y];
case 'L':
return [x-1, y];
}
}
function solution(dirs){
let x= 0;
let y= 0;
let visited = new Set();
for(const dir of dirs){
const [nx, ny] = updatedLocations(x, y, dir);
if(!isValidMove(nx, ny)){
continue;
}
visited.add(`${nx}${ny}${x}${y}`);
visited.add(`${x}${y}${nx}${ny}`);
[x, y] = [nx, ny];
}
return visited.size / 2;
}
console.log(solution('ULURRDLLU'))
console.log(solution('LULLLLLLU'))
이 문제에서 왔던 길은 제외하고 계산을 하기 때문에 Set을 쓰는 게 바람직하다.
구현 방식
1. x축과 y축을 입력값에 맞게 이동 시킨다.
2. 이동된 x, y축의 범위를 확인한다.
3. 이동 전 x, y축과 이동 후 x, y축을 visited에 저장한다. (2가지 순서 모두 ex. a -> b, b -> a)
4. 왔던 길의 size를 나누기 2를 하여 값을 구한다.
'코딩테스트 연습 > Array' 카테고리의 다른 글
[Programmers] n^2 배열 자르기 (1) | 2024.10.09 |
---|