https://school.programmers.co.kr/learn/courses/30/lessons/172928
[문제]
[풀이]
일단 시작점이 ('S') 무조건 첫번째가 아니다 -> 1. 시작점 찾기
'X' 표시에서는 건너뛰고 다음 루트 이동해야한다 -> block 좌표 2. x, y 0 이하 / x , y 좌표 벗어나는 지도 고려해야함 !
[코드]
park: ["SOO","OOO","OOO"]
routes: ["E 2","S 2","W 1"]
result: [2,1]
function solution(park, routes) {
const directions = {
E : [0,1], //동
W : [0, -1], //서
S : [1,0], //남
N : [-1,0] //북
}
// S(시작점) 찾아야 함
let start = [0, 0];
for(let i=0; park.length; i++){
if(park[i].indexOf('S') !== -1){ //false -> return -1 / true -> return index
start = [i, park[i].indexOf('S')]
break;
}
}
// 이동하기 -> blocked 는 pass 하고 다음 루트로 이동
for(const route of routes){
const [dir, dirCnt] = route.split(" ")
let [tempX, tempY] = start
let step = 0
// routes 의 길이가 최대 50 이라 모두 이동해봄
while(step < parseInt(dirCnt)) {
tempX += directions[dir][0] //ex. directions[E] -> [0,1] -> 0인덱스 = 0
tempY += directions[dir][1] //ex. directions[E] -> [0,1] -> 1인덱스 = 1
if(tempX < 0 || park.length <= tempX || tempY < 0 || park[0].length <= tempY || park[tempX][tempY] === 'X') break;//넘어가기
step++
}
//dirCnt 까지만 while 문 돎
if(step === parseInt(dirCnt))
start = [tempX, tempY]
}
return start
}
728x90
반응형
'자료구조+알고리즘 > Programmers' 카테고리의 다른 글
[프로그래머스_Lv.1] 바탕화면 정리 (javascript) (0) | 2024.02.27 |
---|---|
[프로그래머스_lv1] 카드 뭉치 (javascript) (0) | 2024.02.26 |
[프로그래머스 Lv.1] 추억 점수 (javascript) (0) | 2024.02.22 |
[프로그래머스Lv.1] 짝수와 홀수 (.javascript 풀이) (0) | 2023.10.12 |
[프로그래머스Lv.1] 평균 구하기 (.javascript 풀이) (0) | 2023.10.12 |