공원 산책

이리·2025년 4월 22일

문제: https://school.programmers.co.kr/learn/courses/30/lessons/172928

문제설명

  • 주어진 파라미터: String[] park, String[] routes
  • 반환값: int[]
  • 로봇 강아지 상책 → 입력된 명령 따라 진행
  • 공원 벗어나는지, 장애물 만나는지 확인 → 명령 무시 & 다음 명령 수행

풀이방식

  1. S로 시작 위치 찾기
  2. 명령어 돌면서 N E W S 분기별 Cnt 만큼 이동
    → X, 범위를 넘어가는지 확인
    → 넘어가지 않을 경우 해당 값으로 변경

코드

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int row = park.length;
        int col = park[0].length();
        int curX = 0;
        int curY = 0;

        // 시작 위치 찾기
        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(park[i].charAt(j) == 'S'){
                    curX = i;
                    curY = j;
                    break;
                }
            }
        }

        for(String str : routes){
            String[] split = str.split(" ");
            String dir = split[0];
            int cnt = Integer.parseInt(split[1]);
            int nextX = curX;
            int nextY = curY;
            boolean flag = true;

            if(dir.equals("N")){
                for(int i = 0 ; i < cnt; i++){
                    nextX -= 1;
                    if(nextX < 0 || park[nextX].charAt(nextY) =='X'){
                        flag = false;
                        break;
                    }
                }
                if(flag) curX = nextX;

            }else if(dir.equals("S")){
                for(int i = 0 ; i < cnt; i++){
                    nextX += 1;
                    if(nextX >= row || park[nextX].charAt(nextY) == 'X'){
                        flag = false;
                        break;
                    }
                }
                if(flag) curX = nextX;

            }else if(dir.equals("E")){
                for(int i = 0 ; i < cnt; i++){
                    nextY += 1;
                    if(nextY >= col || park[nextX].charAt(nextY) == 'X'){
                        flag = false;
                        break;
                    }
                }
                if(flag) curY = nextY;

            }else{ // "W"
                for(int i = 0 ; i < cnt; i++){
                    nextY -= 1;
                    if(nextY < 0 || park[nextX].charAt(nextY) == 'X'){
                        flag = false;
                        break;
                    }
                }
                if(flag) curY = nextY;
            }
        }

        return new int[]{curX, curY};
    }
}![](https://velog.velcdn.com/images/illli_705/post/2f271296-8daf-4471-8878-9e612002f3c5/image.png)

0개의 댓글