πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: μ΅œμ†Ÿκ°’ λ§Œλ“€κΈ°

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 8. 22. 21:52

문제

https://programmers.co.kr/learn/courses/30/lessons/12941

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ΅œμ†Ÿκ°’ λ§Œλ“€κΈ°

길이가 같은 λ°°μ—΄ A, B λ‘κ°œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 각 배열은 μžμ—°μˆ˜λ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€. λ°°μ—΄ A, Bμ—μ„œ 각각 ν•œ 개의 숫자λ₯Ό 뽑아 두 수λ₯Ό κ³±ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정을 λ°°μ—΄μ˜ 길이만큼 λ°˜λ³΅ν•˜λ©°, 두 수λ₯Ό κ³±

programmers.co.kr

문제 μ„€λͺ…

길이가 같은 λ°°μ—΄ 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 ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

풀이

μ΅œμ†Ÿκ°’μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” 두 숫자의 곱을 μ΅œμ†Œλ‘œ λ§Œλ“€μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, κ°€μž₯ 큰 수λ₯Ό κ°€μž₯ μž‘μ€ μˆ˜μ™€ κ³±ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ΅œμ†Ÿκ°’μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ¦¬λ””ν•˜κ²Œ ν•œμͺ½ 배열은 κ°€μž₯ 큰 μˆ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ, λ‹€λ₯Έ ν•œ μͺ½μ€ κ°€μž₯ μž‘μ€ μˆ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ κ³±ν•΄μ£Όλ©° λ”ν•©λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ ν’€λ €μ„œ κ³ μ°¨ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ μˆμ½”λ”©λ„ μ‹œλ„ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

μ½”λ“œ

import Foundation

func solution(_ A:[Int], _ B:[Int]) -> Int {
    return zip(A.sorted(by: >), B.sorted(by: <)).reduce(0, { $0 + ($1.0 * $1.1) })
}