지갑을 최소한의 크기로 만들려면 가로와 세로 길이를 최대한 작게 만들어야 합니다. 하지만 모든 명함을 수납할 수 있어야 하므로 명함의 가로, 세로 길이의 최댓값을 지갑의 크기로 해야 합니다.
하지만 명함을 돌릴 수 있으므로 지갑의 크기를 최소로 만들기 위해서는 명함을 돌려서 가로, 세로 중에 긴 변을 가로로 가도록 돌리고 그에 맞는 지갑을 만들면 가장 작은 지갑을 만들 수 있습니다.
문제 풀이 아이디어에서는 명함을 돌린다고 표현했지만 입력된 sizes를 실제로 돌릴(?) 필요는 없습니다. 단지 가로, 세로 중에 최댓값과 최솟값을 각각 구해서 그 중에 최댓값을 구하면 되는 것이죠.
풀어서 설명하면 [가로, 세로]의 최댓값 중에 최댓값과 [가로, 세로]의 최솟값 중에 최댓값을 구해서 지갑의 크기로 하면 됩니다.
import Foundation
func solution(_ sizes:[[Int]]) -> Int {
var maxMax = 0 //👉 최댓값 중에 최댓값
var maxMin = 0 //👉 최솟값 중에 최댓값
for size in sizes {
maxMax = max(size.max()!, maxMax) //👉 최댓값 중에 최댓값
maxMin = max(size.min()!, maxMin) //👉 최솟값 중에 최댓값
}
return maxMax * maxMin
}