λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
3️⃣ Swift/Problem Solving

[Swift Algorithm] μ˜ˆμ‚° Programmers(Lv.1)

by seolhee2750 2021. 6. 17.
문제 μ„€λͺ…

Sμ‚¬μ—μ„œλŠ” 각 λΆ€μ„œμ— ν•„μš”ν•œ λ¬Όν’ˆμ„ 지원해 μ£ΌκΈ° μœ„ν•΄ λΆ€μ„œλ³„λ‘œ λ¬Όν’ˆμ„ κ΅¬λ§€ν•˜λŠ”λ° ν•„μš”ν•œ κΈˆμ•‘μ„ μ‘°μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, 전체 μ˜ˆμ‚°μ΄ μ •ν•΄μ Έ 있기 λ•Œλ¬Έμ— λͺ¨λ“  λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 수 μžˆλ„λ‘ ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

λ¬Όν’ˆμ„ ꡬ맀해 쀄 λ•ŒλŠ” 각 λΆ€μ„œκ°€ μ‹ μ²­ν•œ κΈˆμ•‘λ§ŒνΌμ„ λͺ¨λ‘ 지원해 μ€˜μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 1,000원을 μ‹ μ²­ν•œ λΆ€μ„œμ—λŠ” μ •ν™•νžˆ 1,000원을 지원해야 ν•˜λ©°, 1,000원보닀 적은 κΈˆμ•‘μ„ 지원해 쀄 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ d와 μ˜ˆμ‚° budget이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ΅œλŒ€ λͺ‡ 개의 λΆ€μ„œμ— λ¬Όν’ˆμ„ 지원할 수 μžˆλŠ”μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μ œν•œ 쑰건
  • dλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” 배열이며, 길이(전체 λΆ€μ„œμ˜ 개수)λŠ” 1 이상 100 μ΄ν•˜μž…λ‹ˆλ‹€.
  • d의 각 μ›μ†ŒλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ„ λ‚˜νƒ€λ‚΄λ©°, λΆ€μ„œλ³„ μ‹ μ²­ κΈˆμ•‘μ€ 1 이상 100,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • budget은 μ˜ˆμ‚°μ„ λ‚˜νƒ€λ‚΄λ©°, 1 이상 10,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예
d budget result
[1,3,2,5,4] 9 3
[2,2,3,3] 10 4

 

λ‚΄ 문제 풀이
import Foundation

func solution(_ d:[Int], _ budget:Int) -> Int {
    let dep = d.sorted()
    var bud = budget
    var count = 0
    
    for i in 0..<dep.count {
        if dep[i] <= bud { count += 1; bud -= dep[i] }
        else { break }
    }
    
    return count
}
  • μ˜ˆμ‚°μ„ 이리 저리 λΆ„λ°°ν•΄ λ³Ό ν•„μš” 없이, μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œμ— μ˜ˆμ‚°μ„ λΆ„λ°°ν•˜κΈ° μœ„ν•¨μ΄λΌλ©΄ μž‘μ€ μ˜ˆμ‚°μ„ μš”κ΅¬ν•œ λΆ€μ„œλΆ€ν„° μ˜ˆμ‚°μ„ λΆ„λ°°ν•˜λ©΄ λ˜κ² λ‹€κ³  μƒκ°ν–ˆλ‹€.
  • 주어진 μ˜ˆμ‚° 배열을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν–ˆκ³ , μž‘μ€ μ˜ˆμ‚°μ„ μš”κ΅¬ν•œ λΆ€μ„œλΆ€ν„° μ˜ˆμ‚°μ„ λΆ„λ°°ν•΄μ£Όμ—ˆλ‹€.
  • ν•œ λΆ€μ„œμ— μ˜ˆμ‚°μ„ λΆ„λ°°ν•˜λ©΄ count++ ν•΄μ£Όμ—ˆκ³ , λΆ„λ°°ν•œ μ˜ˆμ‚°λ§ŒνΌ 전체 μ˜ˆμ‚° budμ—μ„œ λΉΌμ£Όμ—ˆλ‹€.

 

인상적인 풀이
import Foundation

func solution(_ d:[Int], _ budget:Int) -> Int {
    var budget = budget

    return d.sorted().filter{
        budget = budget - $0
        return budget >= 0
    }.count
}
  • filterλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°”λ‘œ 리턴 λ¬Έμ—μ„œ μ˜ˆμ‚° λΆ„λ°°λ₯Ό ν•΄μ£Όμ—ˆλ‹€.

 

πŸ’‘ ν”Όλ“œλ°±
  • filterλ₯Ό 적절히 μ‚¬μš©ν•˜λ‹ˆ ꡳ이 for문을 λ”°λ‘œ 돌릴 ν•„μš”κ°€ μ—†λ‹€.,!
  • κ³ μ°¨ν•¨μˆ˜ ν™œμš©μ— μžˆμ–΄μ„œλŠ” 맀일 λΆ€μ‘±ν•œ λŠλ‚Œμ΄λ‹€.γ…œ

 


 

문제

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

λŒ“κΈ€