VesselWheel

최소직사각형 본문

Coding Test Practice in Swift

최소직사각형

JasonYang 2024. 2. 23. 09:38

문제

풀이

- 최초풀이

import Foundation

func solution(_ sizes:[[Int]]) -> Int {
    
    var maxsize = 0
    var minsize = 0
    
    for i in sizes {
        maxsize = max(maxsize, i.max()!)
        minsize = min(minsize, i.min()!)
    }
    
    return maxsize * minsize
}

-> 상기의 코드로 풀 경우, 

i.max()i.min()에서는 배열 i의 최대값과 최소값을 반환하는데, 이 값들은 Optional이므로 강제 언래핑(!)을 사용하고 있다. 이는 i가 비어있을 경우 런타임 오류를 발생시킬 수 있다.

 

따라서, 

import Foundation

func solution(_ sizes:[[Int]]) -> Int {
    
    var maxsize = 0
    var minsize = 0
    
    for i in sizes {
        if let maxVal = i.max(), let minVal = i.min() {
            maxsize = max(maxsize, maxVal)
            minsize = max(minsize, minVal)
        }
    }
    
    return maxsize * minsize
}

해석

더보기

i.max()i.min()의 결과를 각각 maxValminVal에 할당하고, 이 값들이 nil이 아닐 경우에만 maxsizeminsize를 업데이트합니다.

이렇게 하면 강제 언래핑을 사용하지 않아도 되므로 안전합니다.

또한, 'minsize'를 찾을 때 'min' 함수 대신 'max' 함수를 사용하였습니다.

이는 'minsize'가 명함을 가로로 눕혔을 때의 세로 길이를 나타내므로, 각 명함의 가로 세로 중 작은 값을 선택하는 것이 아니라 큰 값을 선택해야하기 때문입니다.