반응형
74. 바탕화면 정리

문제

class Solution {
    public int[] solution(String[] wallpaper) {
        int minX, minY;
        int maxX, maxY;
        
        minX = minY = Integer.MAX_VALUE;
        maxX = maxY = Integer.MIN_VALUE;
        
        for(int i=0; i<wallpaper.length; i++){
            for(int j=0; j<wallpaper[i].length(); j++){
                if(wallpaper[i].charAt(j) == '#'){
                    minX = Math.min(minX, i);
                    minY = Math.min(minY, j);
                    maxX = Math.max(maxX, i);
                    maxY = Math.max(maxY, j);
                }
            }
        }
        
        int[] answer = {minX, minY, maxX+1, maxY+1};        
        
        
        return answer;
    }
}

<작성한 코드>

최솟값의 좌표와 최댓값의 좌표의 값으로 사용할 minX, minY, maxX, maxY를 선언했다. 그 뒤 min값들에는 가장 높은 값을 넣어주고, max값들에게는 가장 낮은 값을 초기화해 줬다. 그 뒤 for문을 사용해서 wallpaper안의 모든 값을 비교하도록 했고, wallpaper배열 안의 문자가 #일 때 실행하도록 했다. minX는 minX와 i 중 낮은 값, minY는 minY와 j 중 낮은 값, maxX는 maxX와 i 중에 높은 값, maxY는 maxY와 j 중에 높은 값으로 지정했다. 그 뒤 answer에 4가지의 값을 넣어준 뒤 반환하면 된다. 맥스값에 +1씩 해준 이유는 끝점을 잡아야 하기 때문에 +1씩 해서 좌표를 올바르게 선언해 줬다.

 

 

 

 

75. 공원 산책

문제

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

<작성한 코드>

answer은 좌표를 작성해야 하니 길이를 2로 지정했다. 좌표값을 x, y로 선언하고 처음 for문에서 S가 들어간 배열위치를 찾아서 y값에 i를 넣어줬다. 그 뒤 x값에는 S가 있는 인덱스값을 넣어줬다. 두 번째 for문에서는 routes의 각 배열들을 공백기준으로 나눠줬다. 첫번째값은 문자를 비교하는데 사용할것이고 두번째값은 이동할 길이로 사용을 해줬다. 문제가 생기면 값을 이전값으로 되돌려야하기때문에 nx, ny변수를 생성해서 사용하였다. 두번째 for문안에 있는 for문에서는 i를 0부터 len까지 반복하도록 하였고 문자가 E면 x좌표+1, W면 x좌표-1, S면 y좌표+1, N이면 y좌표-1을 해줬다. 그리고 마지막에 nx가 0보다 작거나 공원 길이를 초과했을 때, ny가 0보다 작거나 공원길이를 초과했을때, 현재값이 X(이동 불가) 값인지 체크를 해줬다. 이 경우에는 nx, ny를 이전값인 x, y를 넣어주고 break를 사용해서 반복문을 종료시켰다. 그 뒤 x, y에 nx, ny값을 넣어줬다. 값을 구해준 뒤 answer에 y값, x값을 넣어주고 반환하였다.

반응형

+ Recent posts