알고리즘/Programmers

[Swift_Programmes] 최소직사각형

YEN_ 2023. 12. 27. 09:49

 

프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


💡 내가 제출한 풀이

import Foundation

func solution(_ sizes:[[Int]]) -> Int {
    
    var width: [Int] = []
    var height: [Int] = []
    var maxWallet = 0
    
    for size in sizes {
        if size[0] > size[1] {
            width.append(size[0])
            height.append(size[1])
        } else {
            width.append(size[1])
            height.append(size[0])
        }
    }
    maxWallet = width.max()! * height.max()!
    
    return maxWallet
}

💡 풀이 과정

 

모든 명함을 수납할 수 있는 가장 작은 사이즈의 지갑을 만드는 문제이다.

세로를 돌려서 가로로 사용할 수 있다는 내용이 포함되었다. 

따라서 가로길이와 세로길이를 비교하여 더 긴 쪽을 무조건 가로로 사용하는 방식으로 풀었다.

var width: [Int] = []
var height: [Int] = []
    
for size in sizes {
    if size[0] > size[1] {
        width.append(size[0])
        height.append(size[1])
    } else {
        width.append(size[1])
        height.append(size[0])
    }
}

반복문과 조건문을 사용해서 0번 인덱스의 숫자(가로길이)가 1번 인덱스의 숫자(세로길이)보다 크다면 0번을 새로운 가로길이 배열에 담고, 1번은 새로운 세로길이 배열에 담는다.

반대의 경우에는 1번을 새로운 가로길이 배열에 담고, 0번은 새로운 세로길이 배열에 담는다.

테스트케이스 예시

 

새롭게 가로, 세로 길이를 담은 배열을 만들어서, 각 배열의 최대값을 구하여 곱하면 모든 명함을 수납할 수 있는 가장 작은 사이즈의 지갑을 만들 수 있다.

배열의 최대값을 구하는 메소드는 max()를 사용한다.

max()는 옵셔널로 반환되기 때문에 강제 추출을 해 주었다.

var maxWallet = 0

maxWallet = width.max()! * height.max()!

 

 

 

 

 

https://developer.apple.com/documentation/swift/array/max()

 

max() | Apple Developer Documentation

Returns the maximum element in the sequence.

developer.apple.com