[99클럽 코테 스터디 3일차 TIL] 바탕화면 정리

2025. 4. 4. 17:06Algorithm

📌  키워드 

  • 완전 탐색 
  • 시뮬레이션
  • 최대 최소

📌  문제 탐색 

문제 링크

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

입력

n X m 의 크기를 갖는 격자판에 #, . 으로 각각 파일, 빈 격자판이 String 1차원 배열로 입력된다.  

출력 

드래그의 시작점과 끝점을 담은 정수 배열 

로직

시작점 찾기 : 파일이 위치한 최소의 x축, y축의 교차점 (min_y_index, min_x_index)
끝점 찾기 : 파일이 위치한 최소의 x축, y축의 교차점 (max_y_index+1, max_x_index+1)
2중 포문을 돌면서 min_y, min_x, max_y, max_x 갱신

코드

import java.util.*; 

class Solution {
    public int[] solution(String[] wallpaper) {
        // 입력 : 바탕화면의 상태를 나타낸 격자판 1차원 배열 wallpaper(최대  50 * 50 ), 빈칸은 "." 파일은 "#" 
        
        // 로직 : 
        // - 시작점 찾기 : 파일이 위치한 최소의 x축, y축의 교차점 (min_y_index, min_x_index)
        // - 끝점 찾기 : 파일이 위치한 최소의 x축, y축의 교차점 (max_y_index+1, max_x_index+1)
        // 2중 포문을 돌면서 min_y, min_x, max_y, max_x 갱신 
        
        int min_y = 51;
        int min_x = 51; 
        int max_y = 0;
        int max_x = 0; 
        
        for (int i=0; i<wallpaper.length; i++){
            for (int j=0; j<wallpaper[i].length(); j++){
                
                if (wallpaper[i].charAt(j) == '#'){
                    min_y = Math.min(min_y,i);
                    max_y = Math.max(max_y,i);
                    min_x = Math.min(min_x,j);
                    max_x = Math.max(max_x,j);
                }
            }
        }
        // 출력 : 드래그의 시작점과 끝점을 담은 정수 배열 
        int[] answer = new int [4];
        answer[0] = min_y; answer[1] = min_x; answer[2] = max_y +1 ; answer[3] = max_x + 1; 
    
        return answer;
    }
}

 

 

📌 회고 

미들러 문제들은 어렵지 않게 알고리즘을 복습하고 시간에 맞추어 푸는 연습을 하기에 좋은 것 같다. 다음달에는 챌린저 도전해봐야겠다.

이중 포문으로 풀 수 있을때는 적극 활용하는 것이 좋다는 생각이다.  

오늘 문제는 로직 자체보다도 출력의 형태를 잘 정의 하고 들어가는 것의 중요성을 느낀 것 같다. x 는 인덱스 번호 그대로 사용하면 되지만, y는 index + 1을 해야 적절한 좌표가 된다.  

오늘도 굿