바탕화면 정리

이리·2024년 12월 11일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/161990

문제설명

  1. 주어진 파라미터: String[] wallpaper
  2. 반환값: int[lux, luy, rdx, rdy]
  3. 작성한 코드를 바탕화면 아무 위치에 저장 → 정리 필요 느낌 → 작성했던 파일을 모두 지우기로
  4. 컴퓨터 바탕화면은 정사각형 격자판 → String[] wallpaper
  5. (0,0) 시작 빈칸은 . 파일이 있는칸은 #으로 표현
  6. 드래그를 사용하면 파일 선택 가능, 선택파일 삭제 가능
  7. 최소한의 이동거리를 갖는 한번의 드래그로 모든 파일을 선택해서 한번에 지우고자 함 → 시작점: S(lux, luy), 끝점: E(rdx, rdy) → 점S에서 점 E로 드래그한다 → 사각형 전체가 선택됨
  8. 드래그 거리: l rdx - lux l + l rdy - luy l

풀이방식

  • wallpaper의 길이가 50 * 50 이라 수행시간에 문제는 없을것 같다.
  • 모든 파일의 좌표값을 돌면서 가장 작은 값과 가장 큰 값을 찾아 각각 대입
  • 2차원 배열이 아니라 String으로 표현됨
  • String.charAt으로 찾아야함

코드

class Solution {
    public int[] solution(String[] wallpaper) {
        int lux = 50 ;
        int luy = 50 ;
        int rdx = 0 ;
        int rdy = 0 ;
        
        int len1 = wallpaper.length;
        int len2 = wallpaper[0].length();
        
        for(int i = 0; i < len1; i++){
            for(int j = 0; j < len2; j++){
                if(wallpaper[i].charAt(j) == '#'){
                    if(i < lux){
                        lux = i;
                    }
                    if(j < luy){
                        luy = j;
                    }
                    if(i > rdx){
                        rdx = i;
                    }
                    if(j > rdy){
                        rdy = j;
                    }
                }
            }
        }
        
        int[] answer = new int[4];
        answer[0] = lux;
        answer[1] = luy;
        answer[2] = rdx + 1; // 마지막 값 포함 
        answer[3] = rdy + 1; // 마지막 값 포함 
        
        return answer;
        
    }
}

회고

마지막 인덱스의 문자도 포함하는 경우를 찾아야하므로 x값과 y값에 각각 +1을 한 값을 적용해야한다.


참 쉽쥬잉~?~?

0개의 댓글