2D 공원 그리드에서 주어진 방향(routes)을 따라 최종 위치를 계산하는 문제입니다. 공원은 시작 지점('S'), 장애물('X'), 그리고 빈 공간('O')으로 구성되어 있습니다. 주어진 방향을 따라 이동하면서 장애물이 있으면 멈추고, 최종 좌표를 반환합니다.

let sPos = null;
const xPos = new Set();
sPos: 시작 지점 'S'의 좌표를 저장합니다.xPos: 모든 장애물 'X'의 좌표를 저장하는 Set입니다. Set을 사용하면 장애물 위치를 쉽게 확인할 수 있습니다.park.map((data, rowIdx) =>
data.split('').map((str, colIdx) => {
if (str === 'S') {
sPos = [rowIdx, colIdx];
} else if (str === 'X') {
xPos.add(`${rowIdx},${colIdx}`);
}
})
);
park 배열을 순회하면서 'S'와 'X'의 위치를 찾아 저장합니다.const directions = {
'E': [0, 1],
'W': [0, -1],
'S': [1, 0],
'N': [-1, 0]
};
E), 서쪽(W), 남쪽(S), 북쪽(N)의 이동 방향과 좌표 변화를 정의합니다.routes.forEach(route => {
let [dir, count] = route.split(' ');
count = parseInt(count);
const [dx, dy] = directions[dir];
let canMove = true;
for (let i = 0; i < count; i++) {
const [newRow, newCol] = [sPos[0] + dx * (i + 1), sPos[1] + dy * (i + 1)];
if (newRow >= 0 && newRow < park.length && newCol >= 0 && newCol < park[0].length) {
if (xPos.has(`${newRow},${newCol}`)) {
canMove = false;
break;
}
} else {
canMove = false;
break;
}
}
if (canMove) {
sPos = [sPos[0] + dx * count, sPos[1] + dy * count];
}
});
'X')이 있는지, 그리드 범위를 벗어나지 않는지 검사합니다.sPos를 새로운 위치로 업데이트합니다.return sPos;
console.log(solution(["OSO", "OOO", "OXO", "OOO"], ["E 2", "S 3", "W 1"]));
park = ["OSO", "OOO", "OXO", "OOO"], routes = ["E 2", "S 3", "W 1"][0, 0]Set을 사용해 장애물 위치를 저장함으로써 각 셀의 장애물 여부를 빠르게 확인할 수 있습니다.