🔗 바탕화면 정리

첫 번째 테스트케이스

 

바탕화면에서 파일들이 위치한 영역을 찾고, 그 영역을 최소한의 이동 거리로 드래그할 수 있는 시작점과 끝점을 계산하면 된다.

 

🥊 접근 방법 🥊

단순 구현 문제이다. 주의할 점은 행의 가장 큰 값열의 가장 큰 값각각 +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