https://school.programmers.co.kr/learn/courses/30/lessons/81301
import Foundation
func solution(_ s:String) -> Int {
let engdict: [String: Int] = ["zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9]
var str: String = s
for eng in engdict.keys {
if(s.contains(eng)) {
str = str.replacingOccurrences(of: eng, with: String(engdict[eng]!))
}
}
return Int(str)!
}
다음과 같이 영문으로 표현된 숫자를 숫자로 바꿔서 원래의 숫자를 return하는 함수를 작성하는 것이다
일단 나는 각각의 영문을 숫자로 변환하기 위하여 0~9까지의 숫자를 딕셔너리로 미리 저장하였다
engdict.keys 배열의 원소들을 순회하면서 해당하는 key(영문 문자열)이 string에 존재하는지 contains()를 사용하여 검사하였고 String의 replacingOccurrences(of:, with:)를 사용하여 문자열에 들어있는 영문 문자열을 숫자 문자열로 바꾸어 주었다
여기서 새로 안 사실은 replacingOccurrences(of:, with:)라는 함수도 새로 알았지만, of와 with 즉 바꿀 문자열과 바뀔 문자열에 해당하는 인자 부분에는 반드시 String을 사용해야 한다는 점을 알게 되었다
그리고 딕셔너리의 해당 key에 해당하는 value를 가져오기 위해서 engdict[eng] 를 사용하였다
이는 옵셔널로 반환되기 때문에 언래핑이 필요하다
import Foundation
func solution(_ s:String) -> Int {
let engdict: [String: Int] = ["zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9]
var str: String = s
for eng in engdict {
if(s.contains(eng.key)) {
str = str.replacingOccurrences(of: eng.key, with: String(eng.value))
}
}
return Int(str)!
}
이후 for loop부분을 수정하여 보았는데, keys를 순회할 필요 없이 딕셔너리를 순회하여 각각 원소의 key가 문자열에 포함되어 있는지 파악하고, key를 value로 바꾸는 과정을 거치는 두번째 풀이도 생각해 볼 수 있었던 것 같다
댓글