주어진 문제는 컴퓨터 바탕화면의 상태를 나타내는 2차원 문자열 배열 wallpaper에서 #이 표시된 파일들을 모두 포함하는 최소 크기의 직사각형을 정의하고, 그 직사각형의 좌상단 점과 우하단 점을 반환하는 것. 이 직사각형의 좌표는 파일들을 모두 포함하면서 드래그를 최소화하는 영역을 나타낸다.
- wallpaper 분석
- wallpaper는 문자열 배열로, #은 파일이 있는 위치를, .은 빈칸을 나타냅니다. 각 문자는 2차원 격자의 특정 위치에 대응.
- 파일 좌표 추출
- 각 행(row)과 열(column)을 탐색하며 #의 위치를 저장합니다. 이를 통해 파일이 있는 좌표를 모두 파악할 수 있다.
- 최소 드래그 범위 계산
- 드래그 범위는 #이 존재하는 모든 좌표의 최소 및 최대 행, 열을 기준으로 계산됩니다.
- 최소 행(lux): 파일이 존재하는 가장 위쪽 행
- 최소 열(luy): 파일이 존재하는 가장 왼쪽 열
- 최대 행(rdx): 파일이 존재하는 가장 아래쪽 행 + 1 (드래그가 직사각형의 아래까지 포함)
- 최대 열(rdy): 파일이 존재하는 가장 오른쪽 열 + 1 (드래그가 직사각형의 오른쪽까지 포함)
- 결과 반환
- [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};
}
}