TIL

99클럽 코테 스터디 26일차 TIL (시뮬레이션)

malang J 2024. 8. 17. 01:45

JAVA / Lv 1. 바탕화면 정리

 

문제

  • 입력 조건:
    • 문자열 배열 wallpaper가 주어집니다.
    • 바탕화면의 가장 왼쪽 위를 (0, 0)으로 시작해 (세로 좌표, 가로 좌표)로 표현합니다.
      빈칸은 ".", 파일이 있는 칸은 "#"의 값을 가집니다
  • 문제:
    • 문자열 배열 wallpaper가 매개변수로 주어질 때 바탕화면의 파일들을 한 번에 삭제하기 위해
      최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 반환하세요.
  • 출력:
    • 드래그의 시작점이 (lux, luy), 끝점이 (rdx, rdy)라면 정수 배열 [lux, luy, rdx, rdy]를 return하면 됩니다.

제한사항

  • 1 ≤ wallpaper의 길이 ≤ 50
  • 1 ≤ wallpaper[i]의 길이 ≤ 50
  • wallpaper의 모든 원소의 길이는 동일합니다.
  • wallpaper[i][j]는 바탕화면에서 i + 1행 j + 1열에 해당하는 칸의 상태를 나타냅니다.
  • wallpaper[i][j]는 "#" 또는 "."의 값만 가집니다.
  • 바탕화면에는 적어도 하나의 파일이 있습니다.
  • 드래그 시작점 (lux, luy)와 끝점 (rdx, rdy)는 lux < rdx, luy < rdy를 만족해야 합니다.

입출력 예


문제 해결

  • 초기화 배열 생성: 최대값, 최소값 활용으로 인해 MAX_VALUE, MIN_VALUE로 초기화합니다.
  • 이중 반복문 생성: 입력으로 주어진 배열의 각 요소가 '#'인지 확인합니다.
    그리고 시작점의 경우 최대한 작아야하고, 끝점의 경우 최대한 커야합니다.
    일부러 크게 만들었던 answer[0]은 '#'이 나올 시 그 즉시 answer[0]값과 i(세로)값을 비교해 작은 값을 넣습니다.
    answer[1]도 동일하고 j(가로)값을 넣습니다.

    일부러 작게 만들었던 answer[2]은 '#'이 나올 시 그 즉시 answer[2]값과 i+1(세로)값을 비교해 큰 값을 넣습니다.
    answer[3]도 동일하고 j+1(가로)값을 넣습니다.

  • 결과 반환: 이중루프가 종료될 때 완성한 배열 시작점, 끝점을 반환합니다.


나의 풀이

class Solution {

    public int[] solution(String[] wallpaper) {
        int[] answer = new int[]{
            Integer.MAX_VALUE, // 최대한 작은 값을 넣어야하므로 최대한 큰 값으로 초기화
            Integer.MAX_VALUE,
            Integer.MIN_VALUE, // 최대한 큰 값을 넣어야하므로 최대한 작은 값으로 초기화
            Integer.MIN_VALUE
        };
        
        for(int i = 0; i < wallpaper.length; i++){
            for(int j = 0; j < wallpaper[i].length(); j++){

                if(wallpaper[i].charAt(j) == '#'){
                    answer[0] = Math.min(i, answer[0]); // 시작점(세로)
                    answer[1] = Math.min(j, answer[1]); // 시작점(가로)
                    answer[2] = Math.max(i+1, answer[2]); // 끝점(세로)
                    answer[3] = Math.max(j+1, answer[3]); // 끝점(가로)
                }
                
            }
        }
        
        return answer;
    }
    
}

위와 왼쪽은 최소로, 아래와 오른쪽은 최대로


회고

  • int 변수 4개 선언한 것을 배열로 바꿔서 초기화 할 수 있었다
  • String[]2차요소 접근시
    wallpaper[i].length - (X)
    wallpaper[i].length() - (O)