본문 바로가기
코딩 테스트

[카카오][Python] 숫자문자열과 영단어

by 카프리썬 2021. 7. 9.
728x90

아래의 문제는 프로그래머스에서 푼 2021 카카오 채용 코딩테스트 내용이며 코드는 직접 푼 내용입니다.


숫자문자열과 영단어 

문제상황

 

요구사항

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다.

s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력


풀이과정

1. 영단어->숫자로 매칭시키기 위한 dict이 필요하다 

2. 매칭된 결과가 필요하다. 문자열로, 이어붙이면 되겠다

3. 숫자면 읽은 그대로 최종문자열로 출력하면 되고, 영단어면 dict에서 찾아서 숫자로 출력한다.

최종문자열을 이어붙이는 식으로 만드니까, 초기화를 잘 생각해야한다..

4. return값은 숫자

결과

내가 푼 코드(정답)

def solution(s):
    dict={} #치환할 값
    en=['zero','one','two','three','four','five','six','seven','eight','nine']
    for i in range(10):
        dict[en[i]]=i
    print(dict)
    #{'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9}
    result='' #최종 치환문자열
    eng=''
    for i in s: #문자열 하나씩 확인
        if i.isdigit(): #숫자면 그대로
            result=result+i
        elif i.isalpha(): #문자면 치환작업
            eng=eng+i #하나씩 이어붙임
            if eng in dict.keys(): #이어붙이다가 숫자단어가 되면
                result=result+str(dict[eng]) #dict에서 찾아서 치환
                eng='' #하나씩 이어붙이는걸 다시 새로 시작할 수 있도록 초기화
    return int(result)

 

 

또는 다른방식으로 푼 코드 

다행히도 숫자가 indx의 번호랑 같다는 점을 활용할 수 있다!

그래서 인덱스와 그 값을 동시에 접근하기 위한 enumerate()를 쓸 수 있다.

2021.05.26 - [Python] 파이썬 enumerate 활용법 | for문을 파이썬스럽게

def solution(s):
    en=['zero','one','two','three','four','five','six','seven','eight','nine']
    answer = ''
    for idx,num in enumerate(en):
        if num in s:
            s=s.replace(num,str(idx))
        answer=s
    return int(answer)

그래서 문자열안에 영단어가 있으면, 그 영단어를 인덱스 번호로 replcae하면 된다! 

그렇게 단어 하나씩 검사를하고 교체를 다 한 최종s를 answer로 리턴하면 된다.

문자열을 이어붙이면서 영단어가 될때까지 하나씩 확인하는 것보다 한번에 영단어를 찾으니까 훨씬 빠르다

 

배운점

  • 처음에 dict을 만들때 어떤걸 기준으로 뽑느냐를 생각해서 key랑 value를 지정해야하겠다.
  • 영어단어와 인덱스번호가 같다면 enumerate()를 고려해보자

 


반응형