[Swift Algorithm] μ΅μκ° λ§λ€κΈ° Programmers(Lv.2)
λ¬Έμ μ€λͺ
κΈΈμ΄κ° κ°μ λ°°μ΄ A, B λκ°κ° μμ΅λλ€. κ° λ°°μ΄μ μμ°μλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
λ°°μ΄ A, Bμμ κ°κ° ν κ°μ μ«μλ₯Ό λ½μ λ μλ₯Ό κ³±ν©λλ€. μ΄λ¬ν κ³Όμ μ λ°°μ΄μ κΈΈμ΄λ§νΌ λ°λ³΅νλ©°, λ μλ₯Ό κ³±ν κ°μ λμ νμ¬ λν©λλ€. μ΄λ μ΅μ’
μ μΌλ‘ λμ λ κ°μ΄ μ΅μκ° λλλ‘ λ§λλ κ²μ΄ λͺ©νμ
λλ€. (λ¨, κ° λ°°μ΄μμ kλ²μ§Έ μ«μλ₯Ό λ½μλ€λ©΄ λ€μμ kλ²μ§Έ μ«μλ λ€μ λ½μ μ μμ΅λλ€.)
μλ₯Ό λ€μ΄ A = [1, 4, 2] , B = [5, 4, 4] λΌλ©΄
- Aμμ 첫λ²μ§Έ μ«μμΈ 1, Bμμ 첫λ²μ§Έ μ«μμΈ 5λ₯Ό λ½μ κ³±νμ¬ λν©λλ€. (λμ λ κ° : 0 + 5(1x5) = 5)
- Aμμ λλ²μ§Έ μ«μμΈ 4, Bμμ μΈλ²μ§Έ μ«μμΈ 4λ₯Ό λ½μ κ³±νμ¬ λν©λλ€. (λμ λ κ° : 5 + 16(4x4) = 21)
- Aμμ μΈλ²μ§Έ μ«μμΈ 2, Bμμ λλ²μ§Έ μ«μμΈ 4λ₯Ό λ½μ κ³±νμ¬ λν©λλ€. (λμ λ κ° : 21 + 8(2x4) = 29)
μ¦, μ΄ κ²½μ°κ° μ΅μκ° λλ―λ‘ 29λ₯Ό return ν©λλ€.
λ°°μ΄ A, Bκ° μ£Όμ΄μ§ λ μ΅μ’ μ μΌλ‘ λμ λ μ΅μκ°μ return νλ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ.
μ ν 쑰건
- λ°°μ΄ A, Bμ ν¬κΈ° : 1,000 μ΄νμ μμ°μ
- λ°°μ΄ A, Bμ μμμ ν¬κΈ° : 1,000 μ΄νμ μμ°μ
μ μΆλ ₯ μ
A | B | answer |
[1, 4, 2] | [5, 4, 4] | 29 |
[1,2] | [3,4] | 10 |
λ΄ λ¬Έμ νμ΄
func solution(_ A:[Int], _ B:[Int]) -> Int {
var result = 0
let arrA = A.sorted(by: <) // μ€λ¦μ°¨μ μ λ ¬
let arrB = B.sorted(by: >) // λ΄λ¦Όμ°¨μ μ λ ¬
for i in 0..<A.count {
result += arrA[i] * arrB[i]
}
return result
}
- λ¨Όμ λ¬Έμ λ₯Ό λ³΄κ³ , ν λ°°μ΄μ κ°μ₯ μμ μμ κ°μ₯ ν° μλ₯Ό λ§€μΉν΄μ κ³±ν΄ λμ νλ©΄ μ΅μκ°μ΄ λκ² λ€κ³ μκ°νλ€.
- λ°λΌμ Aλ μ€λ¦μ°¨μ, Bλ λ΄λ¦Όμ°¨μμΌλ‘ sortν΄μ£Όμκ³ , μμλλ‘ κ³±ν΄μ λμ νλ€.
π‘ νΌλλ°±
- μ’ λ μ½λλ₯Ό κ°κ²°ν μμ±ν μ μμ κ²λ κ°μλ°, λμ ν λ μ€λ₯΄μ§ μμ μ΄λ κ² λ§λ¬΄λ¦¬νλ€.
- κ³ μ°¨ν¨μ 곡λΆκ° λ νμν λ― νλ€.
π [ μΆκ° ] 1μ£ΌμΌ ν λ€μ νμ΄λ³΄κΈ°
func solution(_ A:[Int], _ B:[Int]) -> Int {
return zip(A.sorted(), B.sorted(by: >)).map(*).reduce(0, +)
}
- 첫 λ²μ§Έλ‘ νμμ λμ λ‘μ§μ κ°λ€. ν λ°°μ΄μ μ€λ¦μ°¨μ, ν λ°°μ΄μ λ΄λ¦Όμ°¨μ sort ν΄μ£Όμλ€.
- zipμΌλ‘ λ λ°°μ΄μ λ¬Άμκ³ , mapμ μ¬μ©νμ¬ λ λ°°μ΄μ μ λ ¬λ κ°λ€μ μμλλ‘ κ³±ν΄μ£Όμλ€.
- zipμ 곡λΆνκ³ λμ, zipμ μ¬μ©νκΈ° λ± μ’μ λ¬Έμ μΈ κ² κ°μ μ¬μ©ν΄λ΄€λλ λ무 κ°κ²°νκ² μ μμ±λμλ€!
λ¬Έμ