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)을 가질 수밖에 없어보임
아무튼.........끝
'알고리즘문풀 with SWIFT > Programmers' 카테고리의 다른 글
swift ) 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2022.06.23 |
---|---|
swift ) 프로그래머스 - 21카카오인턴 - 신규 아이디 추천 (0) | 2022.06.22 |
swift ) 프로그래머스 - 20카카오인턴 - 키패드 누르기 (0) | 2022.06.22 |
swift ) 프로그래머스 - 2019카카오인턴 크레인 인형뽑기 게임 (0) | 2022.06.22 |
swift ) 프로그래머스 - 음양 더하기 (0) | 2022.06.20 |