알고리즘 문제 연습

[프로그래머스] 바탕화면 정리

codi-3 2024. 10. 4. 20:32

🔍문제

 


📊분석

  • 파일(#) 이 위치한 가장 작은 y, x 값을 구한다.
  • 파일(#) 이 위치한 가장 큰 y, x의 값을 구한 뒤 1 을더해준다 (y+1, x+1) 드래그를 하면 파일보다 많이 커서를 위치해야 되기 때문.
  • 이 값들을 (minx, miny, maxX, maxY) 값으로 나열한 뒤 보내준다.

✏️ 풀이

import java.util.*;
class Solution {
    public int[] solution(String[] wallpaper) {
       
        int maxY = 0;
        int maxX = 0;
        int minX = wallpaper[0].length();
        int minY = wallpaper.length;
        

        for(int i = 0; i< wallpaper.length; i++){
            String tmp = wallpaper[i];
            for(int j = 0; j< tmp.length();j++){
                char x = tmp.charAt(j);
                if (x == '#'){
                    if(i < minY){
                        minY = i;
                    }
                    if(i > maxY){
                        maxY = i;
                    }
                    if(j < minX){
                        minX = j;
                    }
                    if(j > maxX){
                        maxX =j;
                    }
                }
            }
        }
        
        int[] answer = {minY, minX, maxY+1, maxX+1};
        return answer;
    }
}

 

  •  maxY, maxX의 값은 0으로 세팅해 준다.
  • minX, minY의 값은 가질 수 있는 가장 큰 값인 wallpaper의 길이 그리고 리스트 내부 스트링에 길이로 세팅해 준다.
  • #이 나올 경우 minX, minY, maxX, maxY의 값을 업데이트해 준다.

🤔 다른 사람 풀이

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};
    }
}

 

min max value로 세팅하는 것과 math.min을 쓰는 것이 훨씬 더 간결해 보인다. 하지만 메모리상 if문과 Math패키지중 뭐가 더 효율적인지 알아보고  싶다. 나중에는 한번 비슷한 유형의 문제가 나오면 도전해 봐야겠다.