알고리즘 문제 풀이

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

lgvv 2021. 10. 29. 00:32

✅ 이번 시간에는 프로그래머스에서 푼 문제 하나를 그냥 올려두려고 느낀점도 많음!

 

✅ 문자열에서 index참조하는게 매번 엄청나게 고민인데, 이번에 확실하게 정리해서 좋았어.

다른 사람의 코드도 꼭 확인해보자.

 

🔶 문자열에서 index 찾는 방법 프로세스

 index찾아서 접근해야 함으로 유의하기

 

//
//  main.swift
//  algorithm
//
//  Created by Hamlit Jason on 2021/10/28.
//

/*
 카카오 블라인드 - 숫자 문자열과 영단어
 https://programmers.co.kr/learn/courses/30/lessons/81301
 */
import Foundation

func solution(_ s:String) -> Int {
    
    var answer = "" // String으로 해두고 마지막에 Int로 리턴
    let first = s.startIndex // 첫 인덱스
    var i = 0 // offset
    
    
    while i < s.count { // i의 값이 s.count보다 크면 종료
        let k = s.index(first, offsetBy: i) // index
        let str = s[k] // 인덱스 참조해서 문자 넣음
        
        if str.isNumber {
            answer.append(str)
            i = i + 1
        } else if s[k] == "o" { // 1
            answer.append("1")
            i = i + 3 // 문자 길이 갯수만큼 더해야 해
        } else if s[k] == "t" { // 2 or 3
            let next = s[s.index(first, offsetBy: i+1)]
            if next == "w" {
                answer.append("2")
                i = i + 3
            } else {
                answer.append("3")
                i = i + 5
            }
        } else if s[k] == "f" {
            let next = s[s.index(first, offsetBy: i+1)]
            if next == "o" {
                answer.append("4")
                i = i + 4
            } else {
                answer.append("5")
                i = i + 4
            }
        } else if s[k] == "s" {
            let next = s[s.index(first, offsetBy: i+1)]
            if next == "i" {
                answer.append("6")
                i = i + 3
            } else {
                answer.append("7")
                i = i + 5
            }
        } else if s[k] == "e" {
            answer.append("8")
            i = i + 5
        } else if s[k] == "n" {
            answer.append("9")
            i = i + 4
        } else {
            answer.append("0")
            i = i + 4
        }
    }
    
    return Int(answer)!
}
 
print(solution("one4seveneighttwo"))

 

✅ 다른 사람의 코드

import Foundation

func solution(_ s:String) -> Int {


    var s = s
        var answer = s.replacingOccurrences(of: "zero", with: "0")
            .replacingOccurrences(of: "one", with: "1")
            .replacingOccurrences(of: "two", with: "2")
            .replacingOccurrences(of: "three", with: "3")
            .replacingOccurrences(of: "four", with: "4")
            .replacingOccurrences(of: "five", with: "5")
            .replacingOccurrences(of: "six", with: "6")
            .replacingOccurrences(of: "seven", with: "7")
            .replacingOccurrences(of: "eight", with: "8")
            .replacingOccurrences(of: "nine", with: "9")

    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 {
        str = str.replacingOccurrences(of: arr[i], with: String(i))
    }
    return Int(str)!
}

이 코드도...!

 

다른 사람의 코드도 보면서 배우도록 하자!