사용자 도구

사이트 도구


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)

토론

댓글을 입력하세요:
C J J B Q
 
ps/problems/programmers/81301.txt · 마지막으로 수정됨: 2021/07/10 18:12 저자 teferi