λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⌨️ Language/swift

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ LV.0] μˆ¨μ–΄μžˆλŠ” 숫자의 λ§μ…ˆ (2)

by hyebin (Helia) 2023. 1. 2.
λ°˜μ‘ν˜•

μˆ¨μ–΄μžˆλŠ” 숫자의 λ§μ…ˆ

문제 μ„€λͺ…

λ¬Έμžμ—΄ my_string이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. my_string은 μ†Œλ¬Έμž, λŒ€λ¬Έμž, μžμ—°μˆ˜λ‘œλ§Œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. my_stringμ•ˆμ˜ μžμ—°μˆ˜λ“€μ˜ 합을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

μ œν•œ 사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ my_string μ•ˆμ˜ μžμ—°μˆ˜ ≤ 1000
  • μ—°μ†λœ μˆ˜λŠ” ν•˜λ‚˜μ˜ 숫자둜 κ°„μ£Όν•©λ‹ˆλ‹€.
  • 000123κ³Ό 같이 0이 μ„ ν–‰ν•˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • λ¬Έμžμ—΄μ— μžμ—°μˆ˜κ°€ μ—†λŠ” 경우 0을 return ν•΄μ£Όμ„Έμš”.

μž…μΆœλ ₯ 예

my_string result
"aAb1B2cC34oOp" 37
"1a2b3c4d123Z" 133

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1

  • "aAb1B2cC34oOp"μ•ˆμ˜ μžμ—°μˆ˜λŠ” 1, 2, 34μž…λ‹ˆλ‹€. λ”°λΌμ„œ 1 + 2 + 34 = 37을 return ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

  • "1a2b3c4d123Z"μ•ˆμ˜ μžμ—°μˆ˜λŠ” 1, 2, 3, 4, 123μž…λ‹ˆλ‹€. λ”°λΌμ„œ 1 + 2 + 3 + 4 + 123 = 133을 return ν•©λ‹ˆλ‹€.

제좜

import Foundation

func solution(_ my_string:String) -> Int {
    var temp = ""
    var arr = [Int]()
    
    for s in my_string{
        if s.isNumber {
            temp += String(s)
        }else if !temp.isEmpty{
            arr.append(Int(temp)!)
            temp = ""
        }
    }
     if !temp.isEmpty{
        arr.append(Int(temp)!)
    }
    return arr.reduce(0, +)
}
λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ”© λΉ„κ΅ν•˜λ©° λ¬Έμžμ—΄μ— μˆ«μžκ°€ μžˆλ‹€λ©΄ arr 배열에 μ €μž₯ν•œλ‹€.
이후 reduce ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ 합을 ꡬ해 λ°˜ν™˜ν•œλ‹€.

λ‹€λ₯Έ 풀이

import Foundation

func solution(_ my_string:String) -> Int {
    let pattern = #"\d+"#
    let regex = try! NSRegularExpression(pattern: pattern)
    let range = NSRange(my_string.startIndex..<my_string.endIndex, in: my_string)
    let matches = regex.matches(in: my_string, range: range)

    return matches.reduce(0) { $0 + Int(NSString(string: my_string).substring(with: $1.range))!}
}
μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄ 쀑 숫자인 뢀뢄을 μ°Ύμ•„ 합을 κ΅¬ν•œ ν›„ λ°˜ν™˜ν•œλ‹€.

 

λ°˜μ‘ν˜•