💡 문제
💬 입출력 예시
📌 풀이(소스코드)
import java.util.*;
class Solution {
public int[] solution(String[] wallpaper) {
int lux = Integer.MAX_VALUE;
int luy = Integer.MAX_VALUE;
int rdx = Integer.MIN_VALUE;
int rdy = Integer.MIN_VALUE;
int n = wallpaper.length;
int m = wallpaper[0].length();
for (int x = 0; x < n; x++) {
for (int y = 0; y < m; y++) {
if (wallpaper[x].charAt(y) == '#') {
lux = Math.min(lux, x);
luy = Math.min(luy, y);
rdx = Math.max(rdx, x+1);
rdy = Math.max(rdy, y+1);
}
}
}
return new int[] {lux, luy, rdx, rdy};
}
}
📄 해설
접근
- 드래그를 어떻게 코드로 구현할지를 고민해보는게 우선이다.
- 시작점
S
에서 끝점 E
까지 드래그를 하면 각각의 점을 왼쪽 위, 오른쪽 아래로 하는 직사각형이 만들어진다고 설명이 나와있다.
- 입출력 예시를 보면, 파일이 존재하지 않는 부분에서 드래그를 시작한다. 그리고 그 점들을 확인해보면 각 파일들의 시작점과 끝점들의
x
값, y
값의 최소와 최대인 것을 알 수 있다.
- 그렇다면 파일을 만날 때마다 시작점의 값은 최솟값을 구하고, 끝점의 값은 최댓값을 구하면? -> 모든 파일을 선택하는 드래그 범위가 얻어진다.
과정
- 접근에서 밝힌 바와 똑같이 수행한다.
- 바탕화면
wallpaper
를 순회하면서, 파일이 있는 칸에 도착한 경우, 시작점의 값인 lux
, luy
의 최솟값을 구하고, 끝점의 값인 rdx
, rdy
의 값을 구한다.