https://school.programmers.co.kr/learn/courses/30/lessons/172928
const dirMap = {
N: {
row: -1,
col: 0,
},
E: {
row: 0,
col: 1,
},
S: {
row: 1,
col: 0,
},
W: {
row: 0,
col: -1,
},
};
function getNextPos(park, curr, route) {
const [direction, step] = route.split(' ');
const max = {
row: park.length-1 ,
col: park[0].length-1,
}
// 1스탭씩 이동
for (let i = 0; i < step; i++) {
const [r, c] = [curr[0] + dirMap[direction].row, curr[1] + dirMap[direction].col]; //
// 장애물 있는지, 맵 안에 있는지 확인
// if (park[r][c] === undefined || park[r][c] === 'X') { // 런타임에러 배열의 인덱스가 유효하지 않을때
if (r < 0 || c < 0 || r > max.row || c > max.col || park[r][c] === 'X') {
// 원래 자리로 돌려놓기
return;
}
// 이동가능하면 이동
curr = [r, c];
}
return curr;
}
function solution(park, routes) {
var answer = [];
// 시작점 찾기
const startRow = park.findIndex(str => str.includes('S'));
const startCol = [...park[startRow]].findIndex(c => c === 'S');
let curr = [startRow, startCol];
for (const route of routes) {
const nextPos = getNextPos(park, curr, route);
// 다음 포지션이 있음 이동
if (nextPos) {
curr = nextPos;
}
}
answer = curr;
return answer;
}
// array.findIndex (string X)
// array.find
// parseInt(str)
// let nextPos = null;
// 런타임 에러 !== 시간초과
// 1. 배열 undefined
// 2. max.row = park.lenth - 1
'알고리즘' 카테고리의 다른 글
[프로그래머스] 과일장수 (런타임 에러 문제점 찾는 법) (0) | 2023.05.28 |
---|---|
[프로그래머스]둘만의 암호 (0) | 2023.05.27 |
[프로그래머스]달리기 경주 (0) | 2023.05.27 |
[프로그래머스] 완주하지 못한 선수 (0) | 2023.05.18 |
[프로그래머스] 폰켓몬 JS (0) | 2023.05.18 |