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

이창형·2023년 2월 26일
0

코드

import Foundation

func solution(_ s:String) -> Int {
    var answer = ""
    // 문자들이 들어갈 곳
    var word = ""
    
    for i in s {
    	// 숫자인지 아닌지 확인
        if i.isNumber {
        	// 숫자는 바로 answer에 넣어주고 word를 초기화
            answer += String(i)
            word = ""
        } else {
        	// 알파벳을 word에 추가
            word += String(i)
            // switch문을 만들어서 word가 숫자를 나타내는 알파벳이 되면
            // 숫자로 변환후 answer에 넣는다
            switch word{
            case "zero":
                answer += "0"
                word = ""
            case "one":
                answer += "1"
                word = ""
            case "two":
                answer += "2"
                word = ""
            case "three":
                answer += "3"
                word = ""
            case "four":
                answer += "4"
                word = ""
            case "five":
                answer += "5"
                word = ""
            case "six":
                answer += "6"
                word = ""
            case "seven":
                answer += "7"
                word = ""
            case "eight":
                answer += "8"
                word = ""
            case "nine":
                answer += "9"
                word = ""
            default:
                break
            }
        }
    }
    
    return Int(answer)!
}

더 좋은 코드

import Foundation

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 {
    	// arr안에 있는 zero부터 nine까지 있는지 검사 후 변경
        // 이해하기 쉽게 arr[0] = "zero"이다 zero는 0으로 변환해줘야한다
        // 인덱스 값으로 변환해주면 된다 arr[1]도 "one"이기때문에
        str = str.replacingOccurrences(of: arr[i], with: String(i))
    }
    return Int(str)!
}

회고

  • 혼자 해결을 해서 뿌듯하다
  • 해결은 했지만 코드가 너무 더럽고 초보같았다
  • 더 공부를 열심히해서 해결도 하고 코드도 이쁘고 깔끔하게 쓰고싶다
  • replacingOccurrences 함수를 알게되어 swift 코테 문법에 정리할 것이다
profile
iOS Developer

0개의 댓글