[프로그래머스] 최소직사각형 - JAVA [자바]

doxxx·2022년 12월 24일
0

프로그래머스

목록 보기
1/17
post-thumbnail

링크

문제

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어진다.

모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return한다.

알고리즘

주어진 이차원 배열의 가로 길이와 세로 길이에 대해서 편의상 긴 길이를 가로로, 짧은 길이를 세로라고 한다.

결국, 모든 명함을 넣을 수 있는 지갑의 크기는 가장 긴 가로 길이와 가장 긴 세로 길이로 이루어진 지갑이다.

이를 코드로 구현하게 된다면, sizes를 순회하면서 가로는 큰 값들의 max, 세로는 작은 값들의 max로 구해 이를 곱한 값을 return 하면 된다.

Stream을 이용한 코드는 다음과 같고,

import java.util.*;  
  
class Solution {  
  
    public int solution(int[][] sizes) {  
        int w = Arrays.stream(sizes).mapToInt(size -> Math.max(size[0], size[1])).max().getAsInt();  
        int h = Arrays.stream(sizes).mapToInt(size -> Math.min(size[0], size[1])).max().getAsInt();  
        return w * h;  
    }  
}

단순 반복문을 사용한 풀이는 다음과 같다.

import java.util.*;

class Solution {

    public int solution(int[][] sizes) {
        int w = 0;
        int h = 0;
        for (int[] size : sizes) {
            w = Math.max(w, Math.max(size[0], size[1]));
            h = Math.max(h, Math.min(size[0], size[1]));
        }
        return w * h;
    }
}

메모리는 비슷하지만, Stream을 사용한 코드의 경우 순회를 2번 시행하게되므로 소요 시간은 더 긴 것을 알 수 있다.

0개의 댓글