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

접근 방법 : 문자열 처음부터 보면서, 만일 영단어라면 따로 모아둔 뒤에, dictionary로 관리되는 voc2num 정보 활용해서 대체 하면 될거라 생각함. O(N)이라 시간복잡도도 매우 넉넉하게 통과할것이라 예상

voc2num={
    "zero":"0",
    "one":"1",
    "two":"2",
    "three":"3",
    "four":"4",
    "five":"5",
    "six":"6",
    "seven":"7",
    "eight":"8",
    "nine":"9",
}
def solution(S):
    result=""
    idx=0
    while idx<len(S):
        if S[idx].isdigit():
            result+=S[idx]
            idx+=1
        else: # 문자일 경우 숫자로 변환
            voc=""
            while voc not in voc2num:
                voc+=S[idx]
                idx+=1
            # voc에는 현재 완성된 문자열이 있음 ex) "seven"
            result+=voc2num[voc]
    
    return int(result)

모범답안

import re

def solution(S):
    voc2num = {
        "zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
        "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"
    }
    
    # 숫자 영단어 패턴 생성
    pattern = re.compile("|".join(voc2num.keys()))
    
    # 매칭된 영단어를 숫자로 치환
    converted = pattern.sub(lambda m: voc2num[m.group()], S)
    
    return int(converted)

이거 쓰기 위해 필요한 것들

목적 : 영단어 → 숫자

  1. dictionary의 함수

    voc2num.keys()

    voc2num.values()

    voc2num.items()

  2. 정규표현식의 패턴 제작

    one|two| … |nine 을 잡아야 하므로,

    pattern=re.compile(”|”.join(voc2num.keys())