심지어 이번 문제는 '2021 카카오 채용연계형 인턴십'에 나왔던 문제라고 한다!
어디 한번 시도해보자~
차례대로 한번 해보자!
let s = "2three45sixseven"
for number in s.enumerated() {
print(number)
}
//(offset: 0, element: "2")
//(offset: 1, element: "t")
//(offset: 2, element: "h")
//(offset: 3, element: "r")
//(offset: 4, element: "e")
//(offset: 5, element: "e")
//(offset: 6, element: "4")
//(offset: 7, element: "5")
//(offset: 8, element: "s")
//(offset: 9, element: "i")
//(offset: 10, element: "x")
//(offset: 11, element: "s")
//(offset: 12, element: "e")
//(offset: 13, element: "v")
//(offset: 14, element: "e")
//(offset: 15, element: "n")
임의로 넣은 데이터를 실행시키게 되면 위와 같은 결과를 얻을 수 있다.
if number.element.isNumber {
result += String(number.element)
}
위의 코드에서 for문 내부에서 number.element가 숫자인지 판단하기 위한 isNumber을 사용한다. 그리하여 숫자인 경우에 결과를 표시한다!
if number.element.isNumber {
result += String(number.element)
} else {
word += String(number.element)
}
이미 if문의 조건에서 숫자인 경우를 정하였으니 그 외의 것들은 else로 빠져나왔을 때를 정한다.
let englishNumber: [String] = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
var englishNumberDictionary = [String: Int]()
for (index, number) in englishNumber.enumerated(){
englishNumberDictionary[number] = index
}
if englishNumber.contains(word) {
result += String(englishNumberDictionary[word] ?? 0)
word = ""
}
임의의 변수 word에 저장한 문자열이 'englishNumber' 문자열 배열에 포함이 되면 안에 내용을 실행하는 것으로 구현하였다. 이 때 contains()를 사용해서 문자열 비교를 하였다!
그리고 위에서 사용한 Dictionary는 영어 숫자들의 숫자값을 저장하기 위해 for문으로 데이터를 저장하였다.
그리고 마지막으로 최종으로 result값을 출력하면 끝!
let englishNumber: [String] = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
func solution(_ s:String) -> Int {
var result: String = ""
var word: String = ""
var englishNumberDictionary = [String: Int]()
for (index, number) in englishNumber.enumerated(){
englishNumberDictionary[number] = index
}
for number in s.enumerated() {
if number.element.isNumber {
result += String(number.element)
} else {
word += String(number.element)
if englishNumber.contains(word) {
result += String(englishNumberDictionary[word] ?? 0)
word = ""
}
}
}
return Int(result) ?? 0
}
자! 이제 다른 분들의 풀이를 보고 한번 풀어보도록 하겠습니다!
func solutionV1(_ s:String) -> Int {
let arr = ["zero","one","two","three","four","five","six","seven","eight","nine"]
var str = s
for i in 0..<arr.count {
str = str.replacingOccurrences(of: arr[i], with: String(i))
}
return Int(str)!
}
이분은 입력받은 문자열's'에 replacingOccurrences를 사용하셨는데 이게 뭔지 한번 알아보자!
공식문서를 참조하면 'target'값을 'replacement'값으로 교체를 할 수 있다고 한다!
밑으로 내려보니 또다른 방식이 있었다.
여기서 추가되는 항목은 각각 'option'과 range가 추가된다.
결과적으로 replacingOccurrences를 사용해서 문자열에서 해당되는 부분을 교체하는 형식으로 푸셨다!
이게 더 간단하게 보여서 다음번에 위와같은 문제가 있다면 꼭 응용해보겠따!