본문 바로가기

TIL

[240325] 파이썬: 코드카타 46 & SQL: 코드카타 161~164

[파이썬 코드카타]

숫자 문자열과 영단어

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

 

1) 어떤 문제가 있었나

정수형 숫자와 숫자 영단어가 섞여 있는 문자열을 숫자로 반환하는 문제  

 

s = "2three45sixseven"

result = 234567

 

2) 내가 시도해본 건 무엇인가

숫자와 영단어를 각 리스트로 생성한 후 영단어 앞뒤에 뛰어쓰기를 추가해 split(" ") 함수를 적용해보려고 했으나 실패 

 

3) 어떻게 해결했나

- zip()과 replace() 함수를 이용해 영단어 문자열이 포함돼 있으면, 숫자로 바꾸도록 조건 지정

def solution(s):
    voca = ['zero','one', 'two', 'three','four',
        'five','six','seven','eight','nine']
    num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    for n, v in zip(num, voca):
        if v in s:
            s = s.replace(v, str(n))
    return int(s)

 

4) 무엇을 새롭게 알았나

- items(): 딕셔너리에만 사용 가능한 함수로 for문과 결합해 키(Key)와 값(Value)를 한 번에 받아올 수 있음. 매개변수는 갖지 않음 

└ 딕셔너리 형의 경우, zip 대신 items()로 값 추출 가능

배열이나 딕셔너리 자료형에 다룰 때 유용한 함수일 듯 

num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}

def solution(s):
    answer = s
    for key, value in num_dic.items():
        answer = answer.replace(key, value)
    return int(answer)
    
# num_dic.items()  
# dict_items([('zero', '0'), ('one', '1'), ('two', '2'), ('three', '3'), ('four', '4'), ('five', '5'), ('six', '6'), ('seven', '7'), ('eight', '8'), ('nine', '9')])