[프로그래머스LV1] 숫자 문자열과 영단어

Junyoung Park·2022년 8월 15일
0

코딩테스트

목록 보기
565/631
post-thumbnail

1. 문제 설명

숫자 문자열과 영단어

2. 문제 분석

딕셔너리 해시 성공 및 실패를 통해 제대로 된 숫자가 들어 왔는지 확인했다. DFS 재귀를 통해 시작 인덱스 ~ 끝 인덱스로 만들어지는 영단어가 해시 키로 사용되었고, 특히 한 글자인 경우에는 먼저 알파벳이 아니라 숫자인지 체크했다.

3. 나의 풀이

import Foundation

func solution(_ s:String) -> Int {
    let numberDict = ["zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"]
    var answer = ""
    let s = Array(s).map{String($0)}
    
    func DFS(_ startIdx: Int, _ endIdx: Int) {
        if startIdx == s.count {
            return
        }
        
        if startIdx == endIdx && Character(s[startIdx]).isNumber {
            answer += s[startIdx]
            DFS(endIdx + 1, endIdx + 1)
        } else {
            let possibleWord = s[startIdx...endIdx].joined()
            if let number = numberDict[possibleWord] {
                answer += number
                DFS(endIdx + 1, endIdx + 1)
            } else {
                DFS(startIdx, endIdx + 1)
            }
        }
    }
    
    DFS(0, 0)
    return Int(answer)!
}
profile
JUST DO IT

0개의 댓글