배꼽파지 않도록 잘 개발해요

99클럽 코테 스터디 27일차 TIL - 공원 산책 본문

코딩테스트/99클럽

99클럽 코테 스터디 27일차 TIL - 공원 산책

꼽파 2024. 8. 17. 22:07


function solution(park, routes) {
    // 방향을 벡터 이동으로 매핑
    const directionMap = {
        'N': [-1, 0],  // 북쪽: x축 -1, y축 변화 없음
        'S': [1, 0],   // 남쪽: x축 +1, y축 변화 없음
        'W': [0, -1],  // 서쪽: x축 변화 없음, y축 -1
        'E': [0, 1]    // 동쪽: x축 변화 없음, y축 +1
    };

    // 시작 위치 찾기
    let startX, startY;
    for (let i = 0; i < park.length; i++) {
        for (let j = 0; j < park[i].length; j++) {
            if (park[i][j] === 'S') {  // 'S'는 시작 위치를 나타냄
                startX = i;
                startY = j;
                break;
            }
        }
        if (startX !== undefined) break;  // 시작 위치를 찾으면 루프 종료
    }

    // 현재 위치 초기화
    let curX = startX;
    let curY = startY;

    // 각 명령어 처리
    for (let route of routes) {
        const [direction, distanceStr] = route.split(' ');
        const distance = parseInt(distanceStr);  // 이동 거리
        const [dx, dy] = directionMap[direction];  // 방향에 따른 이동 벡터

        // 이동이 유효한지 확인
        let newX = curX;
        let newY = curY;
        let validMove = true;
        for (let i = 0; i < distance; i++) {
            newX += dx;
            newY += dy;
            // 경계와 장애물 확인
            if (newX < 0 || newX >= park.length ||  // 공원을 벗어나는지 확인
                newY < 0 || newY >= park[0].length ||  // 공원을 벗어나는지 확인
                park[newX][newY] === 'X') {  // 장애물 'X'인지 확인
                validMove = false;
                break;
            }
        }

        // 이동이 유효하면 위치 업데이트
        if (validMove) {
            curX = newX;
            curY = newY;
        }
    }

    // 최종 위치 반환
    return [curX, curY];
}

728x90