TIL-41. [코딩테스트] 프로그래머스 lv1. 숫자 문자열과 영단어

solarrrrr·2022년 1월 10일
0

Today I Learned

목록 보기
41/74
post-thumbnail

숫자와 숫자를 영단어로 바꾼 문자열이 뒤섞인 인자를 받아서
전부 숫자로 바꿔주면 되는 문제였다.

문자열 관련이라 마찬가지로 정규식으로 간단하게 풀어보았는데
너무 정규식만 쓰는 것 같아 다음 번엔 정규식 말고
split이나 다른 걸 이용해서 풀어봐야겠다.

def solution(s):
    s = re.sub('zero', '0', s)
    s = re.sub('one', '1', s)
    s = re.sub('two', '2', s)
    s = re.sub('three', '3', s)
    s = re.sub('four', '4', s)
    s = re.sub('five', '5', s)
    s = re.sub('six', '6', s)
    s = re.sub('seven', '7', s)
    s = re.sub('eight', '8', s)
    s = re.sub('nine', '9', s)
    return int(s)

너무 하드코딩 느낌이라 별로인 느낌이다.
정규식은 한 줄에 처리돼야 깔끔한데..

리턴값에 int를 안 넣어주면 숫자 같이 생긴 문자열을 반환하기 때문에
채점을 통과하지 못한다.

첨에 답은 맞게 나오는데 다 일치하지 않는다고 나와서
어리둥절했었다. ㅎㅎ

다른 사람들이 답을 보니 나랑 똑같이 한 사람들도 있었지만
대부분 리스트 혹은 딕셔너리에 영단어를 담아두고
replace로 치환하는 형태를 썼다.

해당 소스들 참고해서 내 정규식 소스를 줄여보았다.

import re

eng_nums = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

def solution(s):
    for i in range(len(eng_nums)):
      s = re.sub(eng_nums[i], str(i), s)

    return int(s)

이전보다는 조금 더 짧아졌다.
하지만 이전 코드가 내 눈엔 더 직관적으로 읽히는 듯!

profile
몰입

0개의 댓글