본문 바로가기

알고리즘/Lv. 1

프로그래머스 81301 숫자 문자열과 영단어 파이썬 풀이

728x90

난이도 : Lv. 1

풀이일 : 2505283

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


아이디어

  • 각 숫자와 영단어를 묶어 딕셔너리에 저장하자
  • 0부터 9까지 딕셔너리를 돌며 현재 숫자가 s에 문자열로 저장되어 있을 시 숫자로 바꿔주자
  • 숫자형으로 형변환한 s를 출력하자

풀이 코드

def solution(s):
    nums = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
    	    5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}
    
    for i in range(10):
        if nums[i] in s:
            s = s.replace(nums[i], str(i))
    
    return int(s)
  • nums : 각 숫자와 숫자의 영단어 쌍을 저장할 딕셔너리
  • for 반복문 : 0부터 9까지 문자열로 저장되어 있으면 변환
  • return : 숫자형으로 변환한 s 출력

실행 결과


개선 코드

def solution(s):
    nums = {'zero': '0', 'one': '1', 'two': '2', 'three': '3',
            'four': '4', 'five' : '5', 'six': '6', 'seven': '7',
            'eight': '8', 'nine': '9'}
    
    for word, num in nums.items():
        s = s.replace(word, num)

    return int(s)
  • 딕셔너리 안에 저장되는 키-값 순서를 변환하고, 숫자를 문자 형태로 추가했다.
  • for 반복문에서 딕셔너리 내부 모든 요소를 순회하며, s에 숫자 영단어가 있으면 해당되는 숫자로 바꿔준다.

실행 결과


배운점

  • 딕셔너리.items()를 오랫동안 쓰지 않아서 잊고 있었는데 개선할 부분을 찾다가 새로 배웠다. 역시 이래서 안 풀던 방식으로 풀려고 노력해야 하나보다

느낀점

  • 여러 방식으로 풀면 실행 결과에서 시간, 메모리 비교하는 게 재밌는데 쉬운 문제들은 크게 차이가 나지 않는 경우가 많은 것 같다. 좀 더 복잡한 문제 풀어봐야지