프로그래머스 최소 직사각형 [자력]

작성자 : 조회수 :

풀이 시간 : 25

 

완전 탐색을 주제로 한 문제여서 금방 풀었습니다.

 

문제를 파악하는데 15분 정도 걸렸습니다.

 

느끼는 거지만 코테는 알고리즘 공부보단 먼저 지문 이해력이 높아야 하는 것같습니다.

 

 

풀이는 간단했습니다.

 

w h 배열 두개를 만듭니다.

가로와 세로를 배열 한번씩 비교해서 더 큰 값을 가로 배열, 작은 값은 세로 배열로 추가 시키고

 

반복문이 다 돌면 정렬을 진행해(굳이 정렬하지 않고 결국 다 탐색할테니 가장 큰값 가장 작은 값을 담는 변수를 두어도 될 것 같습니다.) 가장 큰 값이 있는 0번째 인덱스 끼리 곱하면 값이 나옵니다. 코드도 간단합니다.

 

 

package Question;

// 프로그래머스, 최소 직사각형

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

import java.util.ArrayList;

import java.util.Collections;

/**

 * 아이디어

 * 1. 일단 무조건 w,h 가장 숫자는 구해야함.

 * 2. w,h 수를 앞으로 변경 해줌. 배열을 두개로 하자

 * 3. w 배열, h 배열 두개로 하며 w h 큰걸 w , 작은걸 h 넣는다.

 * 4. 두개의 배열을 정렬하여 가장 값두개를 곱해주면 됩니다.

 * */

public class MinRectagle {

    public static void main(String[] args) {

    }

    public static int solution(int[][] sizes) {

        int answer = 0;

        ArrayList<Integer> widthList = new ArrayList<>();

        ArrayList<Integer> heightList = new ArrayList<>();

        for (int[] i : sizes){

            if (i[0] < i[1]){

                widthList.add(i[1]);

                heightList.add(i[0]);

            }else{

                widthList.add(i[0]);

                heightList.add(i[1]);

            }

        }

        widthList.sort(Collections.reverseOrder());

        heightList.sort(Collections.reverseOrder());

        answer = widthList.get(0) * heightList.get(0);

        return answer;

    }

}