본문 바로가기

Algorithm

[JAVA 알고리즘] 바탕화면 정리

✅ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/161990

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

✅ 코드

 

class Solution {
    public int[] solution(String[] wallpaper) {
        int minHigh = Integer.MAX_VALUE;
        int maxHigh = Integer.MIN_VALUE;
        int minWeight = Integer.MAX_VALUE;
        int maxWeight = Integer.MIN_VALUE;

        for (int i = 0; i < wallpaper.length; i++) {
            String row = wallpaper[i];
            for (int j = 0; j < row.length(); j++) {
                if (row.charAt(j) == '#') {
                    minHigh = Math.min(minHigh, i);
                    maxHigh = Math.max(maxHigh, i);
                    minWeight = Math.min(minWeight, j);
                    maxWeight = Math.max(maxWeight, j);
                }
            }
        }

       
        return new int[] {minHigh, minWeight, maxHigh + 1, maxWeight + 1};
    }
}

 

 

✏️ 공부한점

 

일단 처음에 생각한건 indexOf로 해당 문자를 찾아서 최소 최대를 구하는거였는데 생각해보니까 같은줄에 여러개 문자가있을수도있어서 해당 방법을 사용하면 안됐다.

 

그리고 이번에 안 새로운사실인데 int의 Wrapper Class인 Integer를 사용하면 최대값과 최소값을 

   

int minHigh = Integer.MAX_VALUE;
int maxHigh = Integer.MIN_VALUE;
int minWeight = Integer.MAX_VALUE;
int maxWeight = Integer.MIN_VALUE;

정수의 최대값은 231-1(2,147,483,647)이고,
정소의 최소값은 -231(-2,147,483,648)입니다.

 

이런식으로 구할수 있었다.

 

그리고 마지막에 maxHigh 와 maxWeight를 +1 하는이유는 끝에 범위까지 포함시키기 위해서다

 

🧠 시각적으로 이해해보기

그냥 maxHigh까지만 쓰면:

 
start = 1, end = 2 for (int i = 1; i < 2; i++) → i = 1까지만 돎!row 2는 빠짐 (틀림)

maxHigh + 1로 쓰면:

 
start = 1, end = 3 for (int i = 1; i < 3; i++) → i = 1, 2row 12 모두 포함됨 (정답!)