
문자열 배열 wallpaper 가 있다. 빈칸은 . , 파일이 있는 칸은 # 값을 가진다. 최소한의 이동거리를 갖는 한 번의 드래그로 모든 파일을 선택해서 지우려고 한다.
wallpaper의 길이 ≤ 50wallpaper[i]의 길이 ≤ 50wallpaper의 모든 원소의 길이는 동일합니다.wallpaper[i][j]는 바탕화면에서 i + 1행 j + 1열에 해당하는 칸의 상태를 나타냅니다.wallpaper[i][j]는 "#" 또는 "."의 값만 가집니다.(lux, luy)와 끝점 (rdx, rdy)는 lux < rdx, luy < rdy를 만족해야 합니다.제한 사항을 보면 최대값이 50이므로 단순 반복으로도 찾을 수 있다고 판단했습니다.
따라서 이중 for문을 이용하여 #이 있는 위치를 찾고,
이라고 가정하고 문제를 해결했습니다.
주의: 끝점에서
+1을 더해야 하는데, 이는 끝점에서부터 파일 크기만큼 추가해야 하기 때문입니다.
public static int[] solution(String[] wallpaper) {
int[] answer = {50, 50, 0, 0};
for (int i = 0; i < wallpaper.length; i++) {
for (int j = 0; j < wallpaper[0].length(); j++) {
if (wallpaper[i].charAt(j) == '#') {
answer[0] = Math.min(answer[0], i); // lux 값 업데이트
answer[1] = Math.min(answer[1], j); // luy 값 업데이트
answer[2] = Math.max(answer[2], i + 1); // rdx 값 업데이트
answer[3] = Math.max(answer[3], j + 1); // rdy 값 업데이트
}
}
}
return answer;
}
answer 배열을 초기화합니다. ({50, 50, 0, 0})
50)0)#이 있는 경우:
answer[0] (lux) → 현재 최소 행을 업데이트answer[1] (luy) → 현재 최소 열을 업데이트answer[2] (rdx) → 현재 최대 행을 업데이트 (i + 1 고려)answer[3] (rdy) → 현재 최대 열을 업데이트 (j + 1 고려)answer 배열을 반환합니다.
// 입력
[".#...", "..#..", "...#."]
// 출력
[0, 1, 3, 4]
(0,1) ~ (3,4)의 범위를 드래그하면 모든#이 포함됩니다.
#을 찾는다.+1 추가