바탕화면 정리

주어진 문제는 컴퓨터 바탕화면의 상태를 나타내는 2차원 문자열 배열 wallpaper에서 #이 표시된 파일들을 모두 포함하는 최소 크기의 직사각형을 정의하고, 그 직사각형의 좌상단 점과 우하단 점을 반환하는 것. 이 직사각형의 좌표는 파일들을 모두 포함하면서 드래그를 최소화하는 영역을 나타낸다.

  1. wallpaper 분석
    • wallpaper는 문자열 배열로, #은 파일이 있는 위치를, .은 빈칸을 나타냅니다. 각 문자는 2차원 격자의 특정 위치에 대응.
  2. 파일 좌표 추출
    • 각 행(row)과 열(column)을 탐색하며 #의 위치를 저장합니다. 이를 통해 파일이 있는 좌표를 모두 파악할 수 있다.
  3. 최소 드래그 범위 계산
    • 드래그 범위는 #이 존재하는 모든 좌표의 최소 및 최대 행, 열을 기준으로 계산됩니다.
    • 최소 행(lux): 파일이 존재하는 가장 위쪽 행
    • 최소 열(luy): 파일이 존재하는 가장 왼쪽 열
    • 최대 행(rdx): 파일이 존재하는 가장 아래쪽 행 + 1 (드래그가 직사각형의 아래까지 포함)
    • 최대 열(rdy): 파일이 존재하는 가장 오른쪽 열 + 1 (드래그가 직사각형의 오른쪽까지 포함)
  4. 결과 반환
    • [lux, luy, rdx, rdy] 형태로 결과를 반환.
public class OrganizingTheDesktop {

    public int[] solution(String[] wallpaper) {
        int height = wallpaper.length, width = wallpaper[0].length();
        int lux = width, luy = height, rdx = 0, rdy = 0;
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                char cell = wallpaper[i].charAt(j);
                if (cell == '#') {
                    if (luy > i) luy = i;
                    if (lux > j) lux = j;
                    if (rdy < i) rdy = i;
                    if (rdx < j) rdx = j;
                }
            }
        }
        return new int[]{luy, lux, rdy + 1, rdx + 1};
    }
}

코딩테스트 연습 - 바탕화면 정리