🔗 바탕화면 정리
바탕화면에서 파일들이 위치한 영역을 찾고, 그 영역을 최소한의 이동 거리로 드래그할 수 있는 시작점과 끝점을 계산하면 된다.
🥊 접근 방법 🥊
단순 구현 문제이다. 주의할 점은 행의 가장 큰 값과 열의 가장 큰 값은 각각 +1을 해주어야 한다는 것이다. 파일의 오른쪽 끝까지 드래그하기 때문이다. 사실 문제가 너무너무 길어서 풀기 싫었는데 알고보니 매우 쉬운 문제였다. 🤤
1. 최솟값과 최댓값
- minX, minY : 드래그의 시작점
- maxX, maxY : 드래그의 끝점
int minX = wallpaper.length;
int maxX = 0;
int minY = wallpaper[0].length();
int maxY = 0;
2. 반복문
'#'을 발견할 때마다 minX, maxX, minY, maxY를 업데이트한다.
for(int i=0; i<wallpaper.length; i++){
for(int j=0; j<wallpaper[i].length(); j++){
if(wallpaper[i].charAt(j) == '#'){
minX = Math.min(minX, i);
maxX = Math.max(maxX, i);
minY = Math.min(minY, j);
maxY = Math.max(maxY, j);
}
}
}
3. 드래그 범위 계산
드래그의 끝 점은 실제로 해당 위치에서 바로 다음 칸이므로 maxX와 maxY는 각각 1을 더해준다.
return new int[] {minX, minY, maxX+1, maxY+1};
✨ 전체코드 ✨
- wallpaper : 컴퓨터 바탕화면의 상태를 나타낸 문자열 배열
import java.util.*;
class Solution {
public int[] solution(String[] wallpaper) {
int minX = wallpaper.length;
int maxX = 0;
int minY = wallpaper[0].length();
int maxY = 0;
for(int i=0; i<wallpaper.length; i++){
for(int j=0; j<wallpaper[i].length(); j++){
if(wallpaper[i].charAt(j) == '#'){
minX = Math.min(minX, i);
maxX = Math.max(maxX, i);
minY = Math.min(minY, j);
maxY = Math.max(maxY, j);
}
}
} return new int[] {minX, minY, maxX+1, maxY+1};
}
}
🌀 성능
- 메모리 : 73.7 MB
- 시간 : 0.16 ms
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 (2) | 2024.07.16 |
---|---|
[프로그래머스] 요격 시스템 (0) | 2024.06.21 |
[프로그래머스] 공원 산책 (0) | 2024.06.16 |
[프로그래머스] 타겟 넘버 (0) | 2024.06.09 |
[프로그래머스] 추억 점수 (0) | 2024.05.24 |