티스토리 뷰

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
}

 

  1. Dictionary를 응용해서 값들을 저장하고 
  2. 반복문을 이용해 각 요소마다 Int인지 확인
    1. Int일 경우 resultArr에 append
    2. Int가 아니면 알파벳 숫자이니 tempStrArr에 append
  3. tempStrArr에 있는 요소들을 합쳐서 (joined()) numDic에 있는 숫자인지 확인
    1. numDic에 있으면 해당 값을 (convertedNum) resultArr에 append
    2. 이후 tempStrArr 요소 전체 삭제 (removeAll())
  4. 반복문이 다 돌았을 경우 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

 

 

  1. 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