알고리즘
[Swift 알고리즘] - 숫자 문자열과 영단어 (Programmers)
Peppo
2024. 7. 31. 13:21
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/81301
내 풀이
import Foundation
let numDic: [String: Int] = [
"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9
]
func solution(_ s:String) -> Int {
var tempArr: String = s
var tempStrArr: [String] = []
var resultArr: [Int] = []
for i in tempArr {
if let num = Int(String(i)) {
resultArr.append(num)
} else {
tempStrArr.append(String(i))
}
let joinedStr = tempStrArr.joined()
if let convertedNum = numDic[joinedStr] {
resultArr.append(convertedNum)
tempStrArr.removeAll()
}
}
let toString = resultArr.map { String($0) }.joined()
let result = Int(toString) ?? 0
return result
}
- Dictionary를 응용해서 값들을 저장하고
- 반복문을 이용해 각 요소마다 Int인지 확인
- Int일 경우 resultArr에 append
- Int가 아니면 알파벳 숫자이니 tempStrArr에 append
- tempStrArr에 있는 요소들을 합쳐서 (joined()) numDic에 있는 숫자인지 확인
- numDic에 있으면 해당 값을 (convertedNum) resultArr에 append
- 이후 tempStrArr 요소 전체 삭제 (removeAll())
- 반복문이 다 돌았을 경우 resultArr 형태 변환 ( [Int] → [String] → Int )
로 구현했으나.. 다른 사람 풀이를 보고 현타가 왔다..
다른사람의 풀이
func solution(_ 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))
print(str)
}
return Int(str)!
}
solution("2three45sixseven")
// 2three45sixseven
// 2three45sixseven
// 2three45sixseven
// 2345sixseven
// 2345sixseven
// 2345sixseven
// 23456seven
// 234567
// 234567
// 234567
- 0 ~ 9까지 순회하면서 "zero"로 되어있는건 0으로, "one"은 1로 ~ "nine"은 9로 변환하는 메서드 사용 (replacingOccurrences())
배운것
replacingOccurrences(of:with:)
of에 있는 String을 with로 변환함
예제
var str1 = "bat ball"
// replace b with c
print(str1.replacingOccurrences(of: "b",with: "c"))
// Output: cat call
알고리즘은 풀어내는 기쁨과 다른사람 풀이를 보며 좌절감이 공존한댜..
그래도 복습하며 내꺼로 만들어 나가보자 💪
728x90