코딩테스트

[프로그래머스] 바탕화면 정리 자바

mhui123 2025. 3. 29. 14:33
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

주어진 바탕화면 정보들을 바탕으로 한 번으로 모든 아이콘을 선택할 수 있는 최소 드래그길이를 갖는 시작점과 종료점의 좌표를 구하는 문제.

 

String[] wallpaper는 바탕화면 정보를 담은 배열이며 "."은 빈칸, "#"은 아이콘을 표현한다.

나의 생각

아이콘들의 좌표정보를 뽑아 각 x, y의 최소값과 최대값 추려 반환하여 처리한다.

우선 최소값 xy, 최대값 xy를 담을 변수 4개를 선언한 후

아이콘 정보의 String인 wallpaper을 반복문처리하여 charAt으로 아이콘을 하나씩 조회해서

Math.min 과 Math.max을 통해 최소값과 최대값을 추출하였다.

 

코드

//바탕화면에서 최소한의 이동거리로 모든 파일을 선택할 수 있는 시작점과 종료점을 반환하라.
    public int[] solution(String[] wallpaper) {
        int wallH = wallpaper.length;
        int wallW = wallpaper[0].length();
        int foundMinX = wallH;
        int foundMinY = wallW;
        int foundMaxX = 0;
        int foundMaxY = 0;
        boolean hasIcon = false;

        //바탕화면정보 정리
        for(int i = 0; i < wallH; i++){
            for(int j = 0 ; j < wallW; j++){
                char c = wallpaper[i].charAt(j);
                if('#' == c){
                    hasIcon = true;
                    foundMinX = Math.min(foundMinX, i);
                    foundMinY = Math.min(foundMinY, j);
                    foundMaxX = Math.max(foundMaxX, i +1);
                    foundMaxY = Math.max(foundMaxY, j +1);
                }
            }
        }

        if(!hasIcon) return new int[]{0, 0, 0, 0};

        return new int[]{foundMinX, foundMinY, foundMaxX, foundMaxY};
    }
반응형