====== 숫자 문자열과 영단어 ====== ===== 풀이 ===== * 단순 구현 문제. * 다만 구현 방법에 있어서는, 직접 매칭을 구현하는게 가장 효율적으로 동작할것 같지만, 코딩이 너무 귀찮다. * 'zero'부터 'nine'까지에 대해서 string.replace() 함수를 10번 반복해서 호출하는 방법이 쉽게 떠오른다. 그리고 정규표현식을 통해서 '(zero|one|...|nine)'의 패턴을 만들고 변환할 패턴을 함수 형태로 넘겨주는 방식을 쓰면 한번의 re.sub()호출로 처리할 수도 있다. 후자쪽이 좀더 속도면에서 효율적이지 않을까 싶긴 한데..정확한 비교는 해보지 않았다. 어차피 시간복잡도는 똑같이 O(n)이다. ===== 코드 ===== """Solution code for "Programmers 81301. 숫자 문자열과 영단어". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/81031 - Solution link: http://www.teferi.net/ps/problems/programmers/81031 """ import re def solution(s): words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] num_by_word = {word: str(i) for i, word in enumerate(words)} rep = re.sub(f"({'|'.join(words)})", lambda m: num_by_word[m.group(0)], s) return int(rep) {{tag>프로그래머스 ps:problems:programmers:Level_1}}