본문 바로가기

Programmers

[Java] 프로그래머스 : 최소직사각형

📌 문제

https://programmers.co.kr/learn/courses/30/lessons/86491

 

코딩테스트 연습 - 최소직사각형

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr

 

📌 풀이

  • 가로 세로 길이 비교해서 가로가 세로보다 크면 두 위치 값을 변경한다.
  • 그리고 가로길이가 가장 긴 것을 저장, 세로 길이 또한 마찬가지로 가장 큰 값을 저장한다.
  • 곱하여 리턴 코드는 간단했지만 생각할수록 점점 꼬여갔던 문제이다.

📌 코드

package programmers;

public class Pro_220523 {
	// 도움 코드
    public static void main(String[] args) {
        int[][] arr = {{10, 7},
                {12, 3},
                {8, 15},
                {14, 7},
                {5, 15}};
        System.out.println(solution(arr));
    }

    public static int solution(int[][] arr) {   // 최소직사각형

        int answer = 0;
        int maxWidth = 0; // 가로
        int maxHeight = 0; // 세로

        for (int i = 0; i < arr.length; i++) {
            int temp = 0;
            for (int j = 0; j < 2; j++) {

                if (arr[i][0] < arr[i][1]) {    // 가로보다 세로가 더 길면 인덱스 변경
                    temp = arr[i][0];
                    arr[i][0] = arr[i][1];
                    arr[i][1] = temp;
                }

                if (maxWidth < arr[i][0]) {     // 가장 큰 가로 길이
                    maxWidth = arr[i][0];
                }
                if (maxHeight < arr[i][1]) {    // 가장 큰 세로 길이
                    maxHeight = arr[i][1];
                }
            }
        }
        answer = maxWidth * maxHeight;  // 곱해서 리턴

        return answer;
    }
}