본문 바로가기

코딩테스트/Programmers

[JAVA] 바탕화면 정리

< 내 풀이 >

class Solution {
    public int[] solution(String[] wallpaper) {
        char arr[][]=new char[wallpaper.length][wallpaper[0].length()];
        for(int i=0;i<arr.length;i++){
            String s=wallpaper[i];
            for(int j=0;j<arr[i].length;j++){
                arr[i][j]=s.charAt(j); //2차원 배열에 값 넣기 
            }
        }
         
        int start_min=Integer.MAX_VALUE;
        int start_max=0;
        int end_min=Integer.MAX_VALUE;
        int end_max=0;
        
         for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
               if(arr[i][j]=='#'){
                   start_min=Math.min(start_min,i);
                   start_max=Math.max(start_max,i);
                   end_min=Math.min(end_min,j);
                   end_max=Math.max(end_max,j);
               }
            }
        }
        int[] answer = {start_min,end_min,start_max+1,end_max+1};
        return answer;
    }
}

 

✏️ 풀이 과정

 

1. 2차원 배열에 wallpaper의 값을 저장한다. 

2. 2차원 배열을 돌면서 값이 # 일 때 ( 파일이 있을 때 ) , 행의 값 중 가장 작은 값과 큰 값, 열의 값 중 가장 작은 값과 큰 값을 각각의 변수의 저장한다. 

3. answer에 { 행 값 중 가장 작은 값, 열 값 중 가장 작은 값, 행 값 중 가장 큰 값+1, 열 값 중 가장 큰 값 +1 } 을 저장하여 return 한다. 

 

< 다른 사람의 풀이 >

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

 

➡️ 나는 2차원 배열에 저장을 했지만, 굳이 하지 않아도 된다!! 

 

✍🏻 느낀점

 

저번에 백준에서 뭔가 비슷한 문제를 풀었어서, 빨리 푼 것 같다. 하지만 실수했던 부분은 start_min 과 end_min의 값을 처음에 0으로 두고 시작해서 계산이 이상하게 되어버렸다. 0보다 작은 값은 없는데..! min을 구하려고 할 때 종종 이런 실수를 하게 되는 것 같은데, 이를 잊지 말고 담에는 실수하지 말자 ! 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 크레인 인형 뽑기 게임  (0) 2024.06.01
[JAVA] 성격 유형 검사하기  (0) 2024.06.01
[JAVA] 개인정보 수집 유효기간  (0) 2024.05.27
[JAVA] 신고 결과 받기  (0) 2024.05.23
[JAVA] 공원 산책  (0) 2024.05.23