728x90
우선 dx,dy,di를 통해서 각 방향에 맞는 변화량을 설정해 주었다.
지금 생각해보면 di하나만 두고, 객체의 값에 'E' : [1,0] 이런 식으로 두었어도 괜찮을 것 같다.
배열에서 "S" 가 들어온 부분을 X,Y로 두고, 명령을 실행해준다.
명령을 하나씩 실행하면서 장애물이 있거나 맵 밖으로 나가면 진행이 안되게 한다.
function solution(park, routes) {
const dy = [1,0,-1,0]
const dx = [0,1,0,-1]
const di = {
'E' : 0,
'S' : 1,
'W' : 2,
'N' : 3
}
const colLen = park[0].length
const rowLen = park.length
let [X,Y] = park.map((el,idx) => el.indexOf("S")===-1 ? null:[idx,el.indexOf("S")]).filter(el=>el!==null)[0]
for (let route of routes){
const [d,l] = route.split(" ")
let [tmpX,tmpY] = [X,Y]
let flg = true
for (let i=0;i<l;i++){
const [nx,ny] = [tmpX + dx[di[d]], tmpY + dy[di[d]]]
if (0<= nx&& nx < rowLen && 0<= ny&& ny<colLen && park[nx][ny]!=="X")
[tmpX,tmpY] = [nx,ny]
else flg = false
}
if(flg) [X,Y] = [tmpX,tmpY]
}
return [X,Y];
}
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 카드 뭉치 (0) | 2023.03.28 |
---|---|
[JS] 대충만든 자판 (0) | 2023.03.26 |
[JS] 덧칠하기 (0) | 2023.03.23 |
[JS] 바탕화면 정리 (0) | 2023.03.21 |
로그인 성공 (0) | 2023.03.13 |