배운점

- 생각보다 너무 오래걸렸다....

생각했던 논리는 맞는데 코드 작성 실수 때문에 계속 오류가 났었다.

더 깔끔하게 풀 수 있을 것 같은데 다시 한 번 풀어보면 좋을 것 같다

 

import java.util.*;
class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] startIdx = {0,0};
        int h = park.length;
        int w = park[0].length();
        
        for(int i = 0; i < park.length; i++){
            if(park[i].indexOf('S') != -1){
                startIdx[1] = park[i].indexOf('S');
                startIdx[0] = i;
                break;
            }
        }
        
        for(int i = 0; i < routes.length; i++){
            boolean flag = true;
            
            switch(routes[i].charAt(0)){
                case 'E' :
                    if(startIdx[1] + (routes[i].charAt(2) - '0') >= w)
                        break;
                    for(int j = 1; j <= (routes[i].charAt(2) - '0'); j++)
                    {
                        if(park[startIdx[0]].charAt(startIdx[1]+j) == 'X'){
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        startIdx[1] += (routes[i].charAt(2) - '0');
                    break;
                case 'W' :
                    if(startIdx[1] - (routes[i].charAt(2) - '0') < 0)
                        break;
                    for(int j = 1; j <= (routes[i].charAt(2) - '0'); j++)
                    {
                        if(park[startIdx[0]].charAt(startIdx[1]-j) == 'X'){
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        startIdx[1] -= (routes[i].charAt(2) - '0');
                    break;
                case 'S' :
                    if(startIdx[0] + (routes[i].charAt(2) - '0') >= h)
                        break;
                    for(int j = 1; j <= (routes[i].charAt(2) - '0'); j++)
                    {
                        if(park[startIdx[0]+j].charAt(startIdx[1]) == 'X'){
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        startIdx[0] += (routes[i].charAt(2) - '0');
                    break;
                case 'N':
                    if(startIdx[0] - (routes[i].charAt(2) - '0') < 0)
                        break;
                    for(int j = 1; j <= (routes[i].charAt(2) - '0'); j++)
                    {
                        if(park[startIdx[0]-j].charAt(startIdx[1]) == 'X'){
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                        startIdx[0] -= (routes[i].charAt(2) - '0');
                    break;
                    
            }
        }
        return startIdx;
    }
}

+ Recent posts