본문 바로가기
코딩테스트 연습/Array

[Programmers] 방문길이

by eddypark 2024. 10. 9.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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