알고리즘문풀 with SWIFT/Programmers

swift ) 프로그래머스 21카카오 인턴 - 숫자 문자열과 영단어

유사앱등이 2022. 6. 22. 17:33

 

 

 

import Foundation

func solution(_ s:String) -> Int {
    let dict = [
        "zero":0, "one":1, "two":2, "three":3, "four":4, "five":5,
        "six":6, "seven":7, "eight":8, "nine":9
    ]
    
    var result = ""
    var temp = ""
    
    for i in s {
        if i.isLetter {
            temp += String(i)
        } else {
            result += String(i)
        }
        
        if dict[temp] != nil {
            result += String(dict[temp]!)
            temp = ""
        }
    }
    
    return Int(result) ?? 0
}

 

처음엔 s를 .split(whereSeparator: )를 사용해서 쪼개보려다가 한참 헤매고..

딕셔너리 만들어주니 깔끔~

근데 다른사람들 풀이 보니까

.replacingOccurrences 를 많이 사용함

 

var str = "23fourfive6one"
let arr = ["zero","one","two","three","four","five","six","seven","eight","nine"]

for i in 0..<arr.count {
	str = str.replacingOccurrences(of: arr[i], with: String(i))
}

이런 식으로 사용하는 건데..

 

어차피 string array 만드는 거나 dictionary 만드는 거나 수동적으로 자료를 하나 만들어야 하는 건 같고 

속도는 딕셔너리가 훨씬 빨랐음

위의 딕셔너리를 사용한 코드에서의 시간복잡도는 O(N)일 것이고 

아래의 replacingOccurrences 메서드를 사용한 코드의 시간복잡도는 O(N^2)일 것임

-- 애플 문서에 정확하게 명시되어 있지는 않지만 구조적으로 최소한 O(N)을 가질 수밖에 없어보임

 

아무튼.........끝