(Swift) Programmers 최솟값 만들기

SteadySlower·2022년 11월 10일
0

Coding Test

목록 보기
190/298

코딩테스트 연습 - 최솟값 만들기

문제 풀이 아이디어

곱셈은 큰수끼리 곱할 때 더욱 커지는 성질을 가지고 있습니다. 따라서 (A의 원소) * (B의 원소)를 구할 때 가장 작은 수끼리 곱한다면 당장의 그 곱셈의 결과는 최솟값이 되겠지만 남은 원소들을 곱해서 나온 값이 너무 커서 최종적으로 합했을 때 최솟값이 되지 않을 것입니다.

따라서 “(A의 원소) * (B의 원소)”의 합을 최솟값으로 만들고자 한다면 A의 원소에서 최솟값은 B의 원소에서 최댓값과 곱하고 B의 원소에서 최솟값은 A의 원소에서 최댓값과 곱해야 합니다.

위와 같은 연산을 쉽게 하기 위해서는 A와 B를 각각 오름차순, 내림차순으로 정렬하고 같은 index를 서로 곱하면 될 것입니다.

코드

func solution(_ A:[Int], _ B:[Int]) -> Int {
    var ans = 0
		
		// 서로 반대의 기준으로 정렬
    let sortedA = A.sorted(by: <)
    let sortedB = B.sorted(by: >)
    
    let count = A.count
    
    for i in 0..<count {
        ans += sortedA[i] * sortedB[i]
    }

    return ans
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글