맵이 주어지고 로봇강아지가 있는데 명령을 준다. 명령은 방향과 거리로 주는데 맵 상에서 방향과 거리 입력값들을 파악해서
마지막 명령 이후 어디에 위치해 있는지 리턴하면된다
맵의 좌표는 좌측 상단이 (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;
}
}
내가 푼 풀이는 재귀를 활용해서 문제를 풀었다.
테스트 코드는 다 통과했는데 제출하니 런타임 에러가 났기 때문이다.
첫 코드는 27번째 줄에서 if(x>-1 && y>-1 && map[x][y]!=‘X’) 이 코드였다.
지금 확인해보니 왜 런타임 에러가 나는지 알겠다.
하도 안풀려서 질문하기에 올렸는데 친절하신 분이 수정해보라고 권유해줘서 풀수 있었다.
다시 수정한 코드를 비교해보면 알겠지만 map[x][y] 일때 [x]가 undefined 일때 런타임 에러가 난다.
그래서 조건을 map[x]가 있을때 로 준것이다.
결과는 통과~ 저것 하나 때문에 한달 동안 다른 문제를 풀었는데 성장하긴 했나보다. 바로 보니 뭐가 문제인지 파악할수 있었다.
다른 사람들도 비슷하게 푼것 같다.
위치를 잡아주고 direction.으로 반복문을 써서 돌렸다.