본문 바로가기
📖 Coding Test/Programmers LV.0

[프로그래머스 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))!}
}
정규식을 사용하여 문자열 중 숫자인 부분을 찾아 합을 구한 후 반환한다.

 

반응형

댓글