프로그래머스 JS 공원산책

이명진·2023년 4월 27일

코드카타

목록 보기
68/81

문제 요약

맵이 주어지고 로봇강아지가 있는데 명령을 준다. 명령은 방향과 거리로 주는데 맵 상에서 방향과 거리 입력값들을 파악해서
마지막 명령 이후 어디에 위치해 있는지 리턴하면된다
맵의 좌표는 좌측 상단이 (0,0) 이다.

문제 풀이

내가 푼 풀이


function solution(park, routes) {
    
    let start = [];
    let map = park.map((x,i)=>{
      let idx = x.indexOf('S');
      if(idx>-1){
        start = [i,idx]
      }
      return x.split('')
    });
  
  routes.forEach(x=>{
    start = move(start,x,map)
  })
   
    return start;
}
function move(now,routes,map){

  const [direction,go] = routes.split(' ');
  const direct = {'W':[0,-1],'E':[0,1],'S':[1,0],'N':[-1,0]}
  let prev = now.slice(0);
  for(let i =0; i<go;i++){
     let x = now[0]+direct[direction][0];
      let y = now[1]+direct[direction][1];

       if(x>-1 && y>-1 &&  map[x] &&map[x][y]&& map[x][y]!='X'){
      
       
           now[0]=x;
          now[1]=y;
      
       
      }else{
        return prev
      }
  }

  if(!map[now[0]][now[1]] || now[0]<0 || now[1]<0 || now[0]>=map.length ||  now[1]>=map[0].length){
    return prev
  }else{
     return now;  
  }
  
 
}

내가 푼 풀이는 재귀를 활용해서 문제를 풀었다.

1차 시도는 실패했다.

테스트 코드는 다 통과했는데 제출하니 런타임 에러가 났기 때문이다.
첫 코드는 27번째 줄에서 if(x>-1 && y>-1 && map[x][y]!=‘X’) 이 코드였다.
지금 확인해보니 왜 런타임 에러가 나는지 알겠다.

하도 안풀려서 질문하기에 올렸는데 친절하신 분이 수정해보라고 권유해줘서 풀수 있었다.

런타임 에러 난 이유

다시 수정한 코드를 비교해보면 알겠지만 map[x][y] 일때 [x]가 undefined 일때 런타임 에러가 난다.
그래서 조건을 map[x]가 있을때 로 준것이다.

결과는 통과~ 저것 하나 때문에 한달 동안 다른 문제를 풀었는데 성장하긴 했나보다. 바로 보니 뭐가 문제인지 파악할수 있었다.

끝

다른 사람들도 비슷하게 푼것 같다.

위치를 잡아주고 direction.으로 반복문을 써서 돌렸다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글