본문 바로가기
(문제풀이)

프로그래머스 (java) : 최소직사각형

by cogito-new 2022. 10. 5.

// 코드

import java.util.Arrays;
class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        
for (int i = 0; i < sizes.length; i++) {
			Arrays.sort(sizes[i]);
		}
		
		int max1 = sizes[0][0];
		int max2= sizes[0][1];
		
		
		for (int i = 0; i < sizes.length; i++) {
			if(max1 < sizes[i][0]) {
				max1 = sizes[i][0];
			}
		}
		for (int i = 0; i < sizes.length; i++) {
			if(max2 < sizes[i][1]) {
				max2 = sizes[i][1];
			}
		}
		
		//System.out.println(max1);
		//System.out.println(max2);
		
		answer = max1 * max2;
		//System.out.println(answer);
		        
        return answer;
    }
}

 

문제풀이 과정

1) 가로와 세로 길이를 비교해야 한다. (for로 배열 하나씩 돌려서 비교를 해야 하나?)

→ 하지만 이렇게 하기에는 나중에 가로와 세로 길이를 바꿔서 생각하는 경우까지 고려해야 한다

2) 가로와 세로 중, 바꿀 것을 고려해 명함 1의 60, 50 중 큰 수를 left, 작은 수를 right로 하여 한번에 정렬하자

→ 그럼 빠르게 하는 방법은? 위의 코드처럼 [ i ] [ 0 ] 에 해당하는 인수들을 우선적으로 정렬하자

3) 이전에 많이 적용했던 Arrays 클래스의 sort() 메소드를 활용해서 정렬하자.

4) 정렬을 완료하고, left, 와 right의 최대값을 곱해 answer를 도출.

 

주어진 문제 사진을 정렬한 경우의 수 ex)

60 50

70 30

60 30

80 40

answer = 80 * 50 으로 최대값을 곱하면 정답이 도출.

 

 

반응형