바탕화면 정리 (자바)

김재현·2023년 12월 7일
0

알고리즘 풀이

목록 보기
44/89

문제

정답 코드

class Solution {
    public int[] solution(String[] wallpaper) {
        int lux=0;
        int luy=-1;
        int rdx=0;
        int rdy=0;

        int minluy=0;
        int maxrdy;

        for (int i=0;i<wallpaper.length;i++) {
            if (wallpaper[i].contains("#")) {
                lux=i;
                break;
            }
        }

        for (int i=0;i<wallpaper.length;i++) {
            if (wallpaper[i].contains("#")) {
                if (luy==-1) {
                    minluy = wallpaper[i].indexOf("#");
                    luy = wallpaper[i].indexOf("#");
                } else {
                    luy=wallpaper[i].indexOf("#");
                    if (minluy>luy) minluy=luy;
                }
            }
        }

        for (int i=0;i<wallpaper.length;i++) {
            if (wallpaper[i].contains("#")) {
                rdx=i+1;
            }
        }

        for (int i=0;i<wallpaper.length;i++) {
            if (wallpaper[i].contains("#")) {
                maxrdy=wallpaper[i].lastIndexOf("#");
                if (maxrdy>rdy) rdy=maxrdy;
            }
        }

        int[] answer = {lux,minluy,rdx,rdy+1};

        return answer;
    }
}

lux는 처음 #를 발견한 wallpaper의 인덱스,
luy는 가장 빠른 순서에 있는 #의 인덱스,
rdx는 가장 나중에 #를 발견한 wallpaper의 인덱스,
rdy는 가장 나중 순서에 있는 #의 인덱스이다.

하나씩 for문을 돌리며 구해준 뒤 합쳐줬다.

문제는 길지만 어렵지 않았다.
하지만 풀고나서 다른 사람의 풀이를 보니, 난 어렵게 풀은 듯 했다.

다른 사람 풀이

class Solution {
    public int[] solution(String[] wallpaper) {
        int minX = Integer.MAX_VALUE;
        int minY = Integer.MAX_VALUE;
        int maxX = Integer.MIN_VALUE;
        int 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);
                }
            }
        }
        return new int[]{minX,minY,maxX+1,maxY+1};
    }
}

Integer.MAX_VALUE는 Java에서 int 데이터 타입의 최대값을 나타내는 상수이다.
Integer.MAX_VALUE는 반대.

이것과 Math.max, Math.min 을 활용하여 저렇게 손쉽게 값을 받아올 수 있었다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글