본문 바로가기
Programming/Python

[프로그래머스 Python] 숫자 문자열과 영단어

by 용스토리랜드 2024. 7. 11.

💡문제 설명

일부 자릿수를 영단어로 바꾼 카드를 건네주면 원래 숫자를 찾는 게임. 

숫자의 일부 자릿수가 영단어로 바뀌었거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매겨변수로 주어진다. s 가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성하기.

 

💡제한 조건 및 입출력 예시

 

💡정답코드

  • dictionary 를 정의해준다. {'영어' : '숫자', ... }
  • temp_str = '' 임시 문자열 저장 변수
  • result = '' 최종 결과 저장 변수
  • 만약에 "one4seven8" 이라는 문자열 s 가 들어온다면 o -> n -> e -> 4 -> ... 로 순회를 시킨다. 만약에 문자열 자료형의 메서드인 isdigit()을 통해 자료형이 숫자형이라면 result 에 더해준다. 만약 아니라면 temp_str 에 o->n->e 형식으로 쌓는다.
  • dictionary 에 키 값으로 존재하는 경우가 완성이 된다면 num_dict 의 키를 통해 값을 찾아 result에 더해준다. 그리고 더해주는 로직이 한 번 실행이 되었다면 다시 temp_str 을 공백 문자열 상태로 초기화 해준다 ! 이렇게 문자열을 모두 순회할 때 까지 반복한다 
  • 완성된 문자열을 int() 내장함수로 감싸줘 정수 자료형으로 return 한다.
  • 결론적으로 "one4seven8" 은 1478 이라는 값을 return 하게 된다.
def solution(s):
    # 영단어를 숫자로 매핑하는 딕셔너리
    num_dict = {
        "zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
        "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"
    }

    # 임시 문자열을 저장할 변수
    temp_str = ""
    # 최종 결과를 저장할 변수
    result = ""

    # 입력 문자열을 하나씩 순회
    for char in s:
        # 만약 숫자라면 결과에 바로 추가
        if char.isdigit():
            result += char
        else:
            # 임시 문자열에 추가
            temp_str += char
            # 만약 임시 문자열이 영단어 딕셔너리에 있다면 변환하여 결과에 추가
            if temp_str in num_dict:
                result += num_dict[temp_str]
                temp_str = ""  # 임시 문자열 초기화

    return int(result)

 

입문 단계에서는 많이 하는 것보다 제대로 알고 넘어가는 것이 중요하다.
반응형