모든 명함의 가로 길이와 세로 길이를 나타내는 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번 시행하게되므로 소요 시간은 더 긴 것을 알 수 있다.