안녕하세요
프로그래머스 JS [공원 산책] 본문
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약
["방향 거리", "방향 거리" … ]
주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.
주어진 방향으로 이동 중 장애물을 만나는지 확인합니다.
위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행
["SOO","OXX","OOO"] S:스타트, X:장애물
풀이:
시작시점 구하기
이동하는 과정에서 park를 넘어서거나 벽이 있다면 이동하지 않기
문제가 없다면 이동하기
이동한 결과 반환하기
function solution(park, routes) {
// 이동 구현
const cor = { E: [0, 1], S: [1, 0], W: [0, -1], N: [-1, 0] };
const move = (at, direction, distance) => {
const start = [...at];
let flag = true;
for (let i = 0; i < distance; i++) {
at[0] += cor[direction][0];
at[1] += cor[direction][1];
// 장애물이나 벽에 막힘 구현
if (at[0] < 0 || at[1] < 0 || at[0] > park.length - 1 || at[1] > park[0].length - 1) {
flag = false;
break;
}
if (park[at[0]][at[1]] == "X") {
flag = false;
break;
}
}
if (flag) {
return at;
}
// 이동에 실패하였다면 원래 위치 반환
return start;
};
let at = [0, 0];
// 시작 위치 찾기
for (let i = 0; i < park.length; i++) {
for (let j = 0; j < park[0].length; j++) {
if (park[i][j] === "S") {
at[0] = i;
at[1] = j;
}
}
}
// 이동정보 입력
for (const route of routes) {
const direction = route.split(" ")[0];
const distance = route.split(" ")[1];
at = move(at, direction, distance);
}
return at;
}