[프로그래머스/Java] - 공원 산책

seb Incode·2023년 5월 8일
0
post-thumbnail

문제 설명







문제 링크

문제 링크로 넘어가기

접근 방법

  1. (park 반복문)강아지의 시작 위치 찾기
  2. (route 반복문)좌표 이동
    • 동 서 남 북 case으로 나눠서 한 칸씩 이동하며
      1) 범위를 벗어났는지
      2) 이동한 칸에 장애물이 있는지
      검사하며 최종 좌표를 구한다.

소스 코드

import java.util.*;

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = new int[2];
        int x = -1;  //시작지점이자 최종 위치
        int y = -1;  //시작지점이자 최종 위치
        int height = park.length;   //공원 높이
        int weight = park[0].length();    //공원 넓이
        
        //공원 순회
        for(int i=0;i<park.length;i++){
            if(park[i].indexOf('S') != -1){
                x = park[i].indexOf('S');
                y = i;
                break;
            }
        }
        
        
        
        // 강아지 명령 순회
        for(int i=0;i<routes.length;i++){
            String[] temp = routes[i].split(" ");
            String vector = temp[0];        //방향
            int distance =  Integer.parseInt(temp[1]);  //거리
            int currX = x;
            int currY = y;
            
            if(vector.equals("E")){ //동
                boolean flag = true;
                for(int j=1;j<=distance;j++){
                    currX++;
                    if(currX >= weight){	//범위를 벗어났나
                        flag = false;
                        break;
                    }
                    // 장애물이 있나
                    else if(park[currY].charAt(currX) =='X'){
                        flag = false;
                        break;
                    }
                    
                }
                if (flag) {
                    x = currX;
                }
            }
            else if(vector.equals("W")){    //서
                boolean flag = true;
                for(int j=1;j<=distance;j++){
                    currX--;
                    if(currX < 0){
                        flag = false;
                        break;
                    }
                    else if(park[currY].charAt(currX) =='X'){
                        flag = false;
                        break;
                    }
                    
                }
                if (flag) {
                        x = currX;
                }
            }
            else if(vector.equals("S")){    //남
                boolean flag = true;
                for(int j=1;j<=distance;j++){
                    currY++;
                    if(currY >= height){
                        flag = false;
                        break;
                    }
                    else if(park[currY].charAt(currX) =='X'){
                        flag = false;
                        break;
                    }
                    
                }
                if (flag) {
                        y = currY;
                }
            }
            else if(vector.equals("N")){    //북
                boolean flag = true;
                for(int j=1;j<=distance;j++){
                    currY--;
                    if(currY < 0){
                        flag = false;
                        break;
                    }
                    else if(park[currY].charAt(currX) =='X'){
                        flag = false;
                        break;
                    }
                    
                }
                if (flag) {
                    y = currY;
                }
            }

        }
        
        answer[0] = y;
        answer[1] = x;
        
        return answer;
    }
}

0개의 댓글