본문 바로가기

프로그래머스(Java)/Level 1

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

728x90

코드 힌트

  1. 초기화:
    • result 배열은 최종적으로 반환될 값으로, 좌상단과 우하단 좌표를 담고 있습니다.
    • 배열의 처음 두 값(최소 Y, 최소 X)은 각각 Integer.MAX_VALUE로 초기화하여, 최소값을 찾는 데 방해되지 않도록 합니다.
    • 나머지 두 값(최대 Y, 최대 X)은 Integer.MIN_VALUE로 초기화하여, 최대값을 찾는 데 방해되지 않도록 합니다.
  2. 2차원 탐색:
    • wallpaper 배열은 각 문자열을 행으로 구성된 2차원 공간을 나타냅니다. 각 문자(열)를 행별로 탐색합니다.
    • # 문자를 찾을 때마다, 해당 좌표를 기준으로 result 배열의 값을 갱신합니다.
  3. 좌표 갱신:
    • #을 찾은 경우, result[0](최소 Y)와 result[1](최소 X)는 최소값을 갱신하여 좌상단의 좌표를 설정합니다.
    • result[2](최대 Y)와 result[3](최대 X)는 최대값을 갱신하여 우하단의 좌표를 설정합니다. 좌표값은 i+1 또는 j+1로 갱신하는데, 이는 인덱스가 0부터 시작하기 때문에 크기를 고려해 1을 더해주는 것입니다.

 

 

 


정답은 더보기 클릭

더보기
class Solution {
    public int[] solution(String[] wallpaper) {
        // 0 : minY, 1 : minX, 2 : maxY, 3 : maxX
        int[] result = new int[4];
        
        // 최소값은 최대값으로, 최대값은 최소값으로 초기화하여 비교 시 문제없게 설정
        for (int i = 0; i < 4; i++) {
            if (i < 2)
                result[i] = Integer.MAX_VALUE; // 최소값을 찾기 위해 최댓값으로 초기화
            else
                result[i] = Integer.MIN_VALUE; // 최대값을 찾기 위해 최솟값으로 초기화
        }
        
        // 2차원 공간 탐색
        for (int i = 0; i < wallpaper.length; i++) {
            String line = wallpaper[i];
            for (int j = 0; j < line.length(); j++) {
                if (line.charAt(j) == '#') {
                    // 좌상단 좌표 갱신
                    result[0] = Math.min(result[0], i);   // 최소 Y
                    result[1] = Math.min(result[1], j);   // 최소 X
                    
                    // 우하단 좌표 갱신
                    result[2] = Math.max(result[2], i + 1); // 최대 Y
                    result[3] = Math.max(result[3], j + 1); // 최대 X
                }
            }
        }
        
        // 결과 반환
        return result;
    }
}
728x90