본문 바로가기

Algorithm

Algorithm(Swift) - 숫자 문자열과 영단어

프로그래머스 2021 카카오 채용연계형 인턴십에 있는 숫자 문자열과 영단어 문제입니다.

문제를 읽어보고 단순하게 생각하면 쉽게 풀수 있습니다.문제를 풀다보니 두가지 방안이 나와서 두개다 올립니다.


1. 첫번째 방법

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

    var resultArray = Array<String>()
    var input = s

    let enDic : [String : String] = [
        "zero" : "0",
        "one" : "1",
        "two" : "2",
        "three" : "3",
        "four" : "4",
        "five" : "5",
        "six" : "6",
        "seven" : "7",
        "eight" : "8",
        "nine" : "9"
    ]

    while input.count != 0 {
        enDic.forEach {
            key, value in

            if input.hasPrefix(key) {
                resultArray.append(value)
                input.removeSubrange(input.index(input.startIndex, offsetBy: 0) ... input.index(input.startIndex, offsetBy: key.count-1))
            }

            if input.hasPrefix(value) {
                resultArray.append(value)
                input.removeSubrange(input.index(input.startIndex, offsetBy: 0) ... input.index(input.startIndex, offsetBy: 0))
            }
        }
    }

    return Int(resultArray.joined())!
}

숫자와, 영문의 값을 가지고 있는 딕셔너리를 만들고

문자열의 앞부분의 값과 key값을 비교합니다 비교하여 해당 값이 있으면 해당 key의 value값을 새로운 변수에 추가해줍니다.

그리고 해당 문자열은 제거합니다.

영문이 아닌(key), 숫자로 들어왔을경우(value) value를 그대로 추가하고 숫자는 한자리 수만 존재하기에 첫번째 문자만 삭제 해줍니다.

개인적으로는 좋은방법이라고 생각하진 않습니다.

2. 두번째 방법

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

    var input = s

    let enDic : [String : String] = [
        "zero" : "0",
        "one" : "1",
        "two" : "2",
        "three" : "3",
        "four" : "4",
        "five" : "5",
        "six" : "6",
        "seven" : "7",
        "eight" : "8",
        "nine" : "9"
    ]

    enDic.forEach {
        key, value in
        input = input.replacingOccurrences(of: key, with: value)
    }

    return Int(input) ?? 0
}

첫번째 방법과 동일하게 딕셔너리를 만든후, 문자열에 해당되어있는 key값이 있을경우 value 값으로 교체 해줍니다.

 

두번째 방법을 진행 하고 난뒤, 너무 복잡하게 문제를 풀고 있었구나 생각했습니다.

문제를 보고난뒤 생각의 폭을 넓힐 필요가 있어 보입니다.

 

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

 

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

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

programmers.co.kr

 

'Algorithm' 카테고리의 다른 글

Algorithm(Swift) - 신규 아이디 추천  (0) 2021.09.21
Algorithm(Swift) - 부족한 금액 계산하기  (0) 2021.09.12
Algorithm(Swift) - H-Index  (0) 2021.08.28
Algorithm(Swift) - 가장 큰 수  (0) 2021.08.27
Algorithm(Swift) - 모의고사  (0) 2021.08.27