🚩 문제 주소
📄 접근 방법
구현
더보기
- 먼저 width, height와 시작 좌표를 구해줍니다.
- 주어진 방향에 따라 조건을 나누어 줍니다.
- 현재 위치 좌표에 주어진 숫자를 더합니다.
- 범위를 넘어갔으면 바로 break 합니다.
- 범위 내 라면, 주어진 방향이 W, E일 경우 현재 위치와 더한 위치까지 slice를 합니다. N, S일 경우는 세로 slice를 해야하기 때문에 저는 그냥 배열에 push를 해주었습니다.
- 만들어진 배열에 X가 없다면 현재 위치를 업데이트합니다. - 현재 위치를 반환합니다.
👨💻 나의 코드
function solution(park, routes) {
// width, height 정의
const [WIDTH, HEIGHT] = [park[0].length, park.length];
// 시작 좌표 찾기
let location = [];
for (let i=0; i<HEIGHT; i++) {
for (let j=0; j<WIDTH; j++) {
if (park[i][j] === 'S') {
location = [i, j];
break;
}
}
}
// 각 방향에 따라 좌표를 구해주기
// 구한 좌표가 범위를 넘어갔으면 바로 break
// 기존 좌표와 구한 좌표만큼 배열을 자르거나 만들기
// 그 배열 안에 X가 없다면 현재 위치 업데이트
for (const route of routes) {
const [op, n] = route.split(" ");
let [h, w] = location;
let temp = []
switch (op) {
case "E":
w += parseInt(n);
if (w >= WIDTH) break;
temp = park[h].slice(location[1], w+1);
if (!temp.includes('X')) location = [h, w];
break;
case "W":
w -= parseInt(n);
if (w < 0) break;
temp = park[h].slice(w, location[1]+1);
if (!temp.includes('X')) location = [h, w];
break;
case "S":
h += parseInt(n);
if (h >= HEIGHT) break;
for (let i=location[0]; i<=h; i++) {
temp.push(park[i][w]);
}
if (!temp.includes('X')) location = [h, w];
break;
case "N":
h -= parseInt(n);
if (h < 0) break;
for (let i=h; i<=location[0]; i++) {
temp.push(park[i][w]);
}
if (!temp.includes('X')) location = [h, w];
break;
default:
break;
}
}
return location;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스 / JS] 게임 맵 최단거리 - Level 2 (1) | 2023.04.17 |
---|---|
[프로그래머스 / JS] 타겟 넘버 - Level 2 (0) | 2023.04.13 |
[프로그래머스 / JS] 올바른 괄호 - Level 2 (0) | 2023.04.04 |
[프로그래머스 / JS] 추억 점수 - Level 1 (0) | 2023.04.02 |
[프로그래머스 / JS] 구명보트 - Level 2 (0) | 2023.03.24 |