[프로그래머스] 공원 산책 (JS)

hhkim·2023년 7월 26일
0

Algorithm - JavaScript

목록 보기
76/188
post-thumbnail

풀이 과정

  1. E: [0, 1], W: [0, -1], S: [1, 0], N: [-1, 0] 객체 생성
  2. park에서 S의 인덱스 구한 다음 현재 위치에 저장: join(), indexOf()
  3. routes의 각 요소에 대해 반복: forEach()
  4. 각 요소를 방향과 칸으로 분리: split()
  5. 방향에 대해 더할 값을 1번 객체에서 찾기
  6. 4번에서 찾은 값을 현재 위치에 1부터 칸만큼 더해나가면서 X를 만나거나 공원을 벗어나는 경우 넘어가기
    아니면 현재 위치 갱신

코드

function solution(park, routes) {
  const obj = { E: [0, 1], W: [0, -1], S: [1, 0], N: [-1, 0] };
  const start = park.join('').indexOf('S');
  let curr = [parseInt(start / park.length), start % park[0].length];
  routes.forEach((route) => {
    const [dir, cnt] = route.split(' ');
    let [x, y] = curr;
    for (let i = 0; i < Number(cnt); ++i) {
      x += obj[dir][0];
      y += obj[dir][1];
      if (
        x < 0 ||
        x >= park.length ||
        y < 0 ||
        y >= park[0].length ||
        park[x][y] === 'X'
      ) {
        return;
      }
    }
    curr = [x, y];
  });
  return curr;
}

🦾

평소보다 오래 고민이 필요해서 40분 정도 걸렸다.
끊임없는 런타임 에러...
배열에 인덱스로 접근할 때 범위를 넘어가지 않는지 잘 확인하자

0개의 댓글