# Algorithm/--- 프로그래머스

[프로그래머스] 최솟값 만들기

jiniz.ll 2022. 1. 26. 00:38

문제

  • 길이가 같은 배열 두 개가 주어짐
  • 각각의 배열에서 하나씩 숫자를 뽑아 두 수를 곱함
  • 이 과정을 배열의 길이만큼 반복하며 곱한 값을 누적하여 더할 때
  • 최종 누적 값이 최소가 되도록 만들어야 함
  •  
  • 이 때, 각각의 숫자는 한 번씩만 뽑을 수 있음
  •  
  • 배열의 크기는 1000 이하 자연수
  • 원소의 크기는 1000 이하 자연수

Idea

  • 한 배열은 가장 작은 값부터, 다른 배열은 가장 큰 값부터 각각 곱해서 더하면 가장 작은 값이 나올 것 같음
  •  
  • 하나는 오름차순, 다른 하나는 내림차순으로 정렬해서
  • 반복문 사용해서 곱하여 누적하기

Code

Swift

  • 뭐지,, 처음에 효율성에서 두 개 시간초과 나길래 잉?? 아닌가 하고 찾아봤는데 다 나랑 똑같음
  • 그래서 다시 돌렸더니 통과됨!
import Foundation

func solution(_ A:[Int], _ B:[Int]) -> Int
{
    var answer = 0
    
    let a = A.sorted()
    let b = B.sorted(by: >)
    for i in 0..<a.count {
        answer += a[i] * b[i]
    }

    return answer
}