[PGS] 바탕화면 정리 - JAVA

최영환·2023년 8월 13일
0

Programmers

목록 보기
22/43

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

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 의 값을 구한다.
profile
조금 느릴게요~

0개의 댓글