iOS 개발일기

[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - 숫자 문자열과 영단어 본문

코딩테스트

[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - 숫자 문자열과 영단어

맨날 까먹으니 적어두자 2021. 8. 19. 13:56

https://programmers.co.kr/learn/courses/30/lessons/81301

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

나의 풀이

func solution(_ s: String) -> Int {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    
    var result = s
    numbers.enumerated().forEach { (i, num) in
        result = result.replacingOccurrences(of: num, with: String(i))
    }

    return Int(result) ?? 0
}

 

처음에는 열거형(enum)으로 정리해보고 싶어서 했었습니다만 

에러가 뜨더라구요...

(xCode에서는 잘 되던데...)

 

열거형(enum)을 사용한 풀이

enum Number: String, CaseIterable {
    case zero, one, two, three, four, five, six, seven, eight, nine

    var value: String {
        switch self {
        case .zero : return "0"
        case .one  : return "1"
        case .two  : return "2"
        case .three: return "3"
        case .four : return "4"
        case .five : return "5"
        case .six  : return "6"
        case .seven: return "7"
        case .eight: return "8"
        case .nine : return "9"
        }
    }
}

func solution(_ s: String) -> Int {
    var result = s   
    Number.allCases.forEach { num in
        result = result.replacingOccurrences(of: num.rawValue, with: num.value)
    }
    
    return Int(result) ?? 0
}

위 방법은 효율적이지 못하여 '이런 방법도 있구나' 정도로만 알아주시면 감사하겠습니다.