티스토리 뷰
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
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] - 올바른 괄호 (Programmers) (0) | 2024.08.09 |
---|---|
[Swift 알고리즘] - 콜라 문제 (Programmers) (0) | 2024.07.26 |
[Swift 알고리즘] - 행렬의 덧셈 (Programmers) (0) | 2024.07.11 |
[Swift 알고리즘] - Valid Parentheses (LeetCode) (0) | 2023.08.24 |
[Swift 알고리즘] - Best Time to Buy and Sell Stock (LeetCode) (0) | 2023.08.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- swift (programmers)
- Swift inout
- 원티드 프리온보딩
- ios
- swift reduce
- RTCCameraVideoCapturer
- Swift 프로퍼티
- Swift ModernRIBs
- 2023년 회고
- Swift joined
- swift protocol
- Swift RIBs
- Swift 내림차순
- Swift
- Combine: Asynchronous Programming with Swift
- swift 고차함수
- Swift joined()
- RIBs tutorial
- Swift 알고리즘
- Swift final
- swift property
- Swift 프로그래머스
- Swift init
- iOS error
- Swift Leetcode
- removeLast()
- swift programmers
- Class
- CS 네트워크
- Swift Error Handling
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함