문제출처


class Solution {
    public int[] solution(String[] park, String[] routes) {
        
        int x = -1;
        int y = -1;
        
        char[][] map = new char[park.length][park[0].length()];
        
        for(int i = 0; i < park.length; i++){
            map[i] = park[i].toCharArray();
            
            if(park[i].contains("S")){
                y = i;
                x = park[i].indexOf("S");
            }
        }
        
        for(String route : routes){
            
            String way = route.split(" ")[0];
            int len = Integer.parseInt(route.split(" ")[1]);
            
            int nx = x;
            int ny = y;
            
             for(int i = 0; i < len; i++){
                if(way.equals("E")){
                    nx++;
                }
                if(way.equals("W")){
                    nx--;
                }
                if(way.equals("S")){
                    ny++;
                }
                if(way.equals("N")){
                    ny--;
                }
                if(nx >=0 && ny >=0 && ny < map.length && nx < map[0].length){
                    if(map[ny][nx] == 'X'){
                        break;
                    }
                   
                    if(i == len-1){
                        x = nx;
                        y = ny;
                    }
                }
            }
        }       
        
        int[] answer = {y, x};
        
        
        return answer;
    }
}

접근방법

먼저 char형 2차원 배열을 만들어 공원 지도를 만든다.

map[i] = park[i].toCharArray();를 활용하여 문자열을 char형 배열로 변환하여 저장한다. 문자열에 S가 포함되어 있다면 시작지점이기 때문에, y 에는 i 의 값을 x 에는 park[i].indexOf(“S”) 를 저장한다.

명령을 수행한다. 명령이 담긴 문자열배열은 [“E 2”,”S 2”, “W 1”] 와 같이 들어있기 때문에 routes를 순회하며 문자 하나하나를 way 변수(방향)와 len(길이)변수에 나눠 저장한다.

길이만큼 반복문을 돌며 if문을 수행한다. E일 경우 동쪽 nx++; W일 경우 서쪽 nx–; S일 경우 남쪽 ny++; N일 경우 북쪽 ny–;


if(nx >=0 && ny >=0 && ny < map.length && nx < map[0].length)

해당 조건문으로 map밖이 아닌경우 X를 만나면 반복문을 종료하고, i가 길이-1일경우(반복문을 다 돌았을 경우에는) 마지막 좌표값을 저장해서 반환하도록 하였다.