ps:problems:programmers:81301
목차
숫자 문자열과 영단어
ps | |
---|---|
링크 | programmers.co.kr/… |
출처 | 프로그래머스 |
문제 번호 | 81301 |
문제명 | 숫자 문자열과 영단어 |
레벨 | Level 1 |
분류 |
기초 |
시간복잡도 | O(n) |
인풋사이즈 | n<=50 |
사용한 언어 | Python |
해결날짜 | 2021/07/10 |
출처 |
ps:problems:programmers:2021_카카오_채용연계형_인턴십 |
풀이
- 단순 구현 문제.
- 다만 구현 방법에 있어서는, 직접 매칭을 구현하는게 가장 효율적으로 동작할것 같지만, 코딩이 너무 귀찮다.
- '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)
ps/problems/programmers/81301.txt · 마지막으로 수정됨: 2021/07/10 18:12 저자 teferi
토론