새소식

SOLVED

[프로그래머스] 공원 산책 (JS)

  • -
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 분석

 

문제 설명

 

로봇 강아지가 주어진 명령에 따라 직사각형 공원에서 산책을 합니다. 공원은 'O' (이동 가능), 'X' (장애물), 'S' (시작 지점)으로 구성된 격자 형태입니다. 로봇 강아지는 주어진 명령을 순서대로 수행하며, 각 명령은 방향 ('N', 'S', 'E', 'W')과 거리로 구성됩니다. 명령을 수행하기 전에, 로봇 강아지는 다음을 확인합니다:

  1. 이동하려는 방향이 공원을 벗어나는지.
  2. 이동 경로에 장애물이 있는지.

이 두 조건 중 하나라도 충족하면 해당 명령은 무시되고, 다음 명령으로 넘어갑니다. 모든 명령을 수행한 후 로봇 강아지의 최종 위치를 반환합니다.

 

제약사항

  • 공원의 크기는 3x3 이상, 50x50 이하
  • 명령의 길이는 1 이상, 50 이하
  • 명령의 거리는 1 이상, 9 이하

 

 


2. 해결 방법 

1. 공원의 정보를 받아 어디서 출발하는지, 어떤 지점에 장애물이 있는지 여부를 확인합니다. 

  • a. 출발지점 찾기 
  • b. 문자열 배열을 2D Matrix로 변환 

2. 명령을 파싱하여 하나씩 처리한다. 

 

3. 명령 처리 과정 

  • - 명령을 파싱하여 방향(way)과 거리(length)를 추출
  • - 주어진 방향으로 하나씩 이동하면서 경계와 장애물을 확인
  • - 경계나 장애물을 만나면 해당 명령을 중단하고 다음 명령으로 넘어간다. 
  • - 이동이 성공적으로 완료되면 해당 위치를 로봇의 위치로 업데이트

4. 모든 명령을 처리한 후 최종 위치를 반환

 


 

3. 풀이 코드

// 공원 배열에서 시작 지점 'S'의 좌표를 찾는 코드
// 이중 for문을 사용하여 각 행(row)을 검사하고, 'S'가 있는 열(column)의 인덱스를 찾고,
// 찾으면 [행, 열] 형태의 배열을 반환한다. 


function findStartPosition(park) {
    for (let i = 0; i < park.length; i++) {
        const row = park[i];
        const j = row.indexOf('S');
        if (j !== -1) {
            return [i, j];
        }
    }
    return null;
}

function solution(park, routes) {
    let startPosition = findStartPosition(park);
    const parkMatrix = park.map(row => row.split(''));

    routes.forEach((route) => {
        let [i, j] = startPosition;
        const way = route.split(" ")[0];
        const length = route.split(" ")[1];

        for (let step = 1; step <= length; step++) {
            if (way === 'E') j += 1;
            if (way === 'W') j -= 1;
            if (way === 'S') i += 1;
            if (way === 'N') i -= 1;

            // 경계 체크
            if (i < 0 || i >= parkMatrix.length || j < 0 || j >= parkMatrix[0].length) {
                break;
            }

            // 장애물 체크
            if (parkMatrix[i][j] === 'X') {
                break;
            }

            if (step == length) startPosition = [i, j];
        }
    });

    return startPosition;
}
반응형
Contents
-

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.