알고리즘(백준, 프로그래머스)/[프로그래머스] Lv1

[프로그래머스] Lv1. 숫자 문자열과 영단어 - 파이썬(Python)

마법사 코딩공주 2023. 5. 12. 16:59
728x90
반응형

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📝 문제설명

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

 - 1478 → "one4seveneight"
 - 234567 → "23four5six7"
 - 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. 
s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

🔗 제한 사항

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

🔗입출력예

 


👉 문제풀이

  • 먼저, 숫자와 영단어를 딕셔너리 형태로 저장해서 문제를 접근해야 될거같아서 딕셔너리 자료형을 만들어주었다.
  • 반목문을 통해 문자열을 char에 하나하나씩 넣어 비교하기 시작했다.
  • 그리고 s문자열에 숫자만 있을 경우 그냥 숫자를 출력하면 되서 isdigit() 함수를 통해 걸러냈다. 근데 return 값이 문자형이라 정답이랑 달라서 int(answer)로 정수형으로 변환시켜주었다.
  • 숫자형이 아닌 문자일 경우는 temp 변수에 하나하나씩 문자열을 추가하여 num_dict의 key값과 비교하였다.
  • 해당 Key값이 있을 경우 그 키에 해당하는 숫자를 answer변수에 문자를 추가한다.
  • 이게 끝날 경우 다시 temp를 빈 문자열로 초기화 시킨다.(temp = '')
  • 초기화를 안할 경우 계속 문자열이 누적되어, 원하는 값을 얻지 못한다.
def solution(s):
    answer = ''
    temp = ''
    num_dict = {'zero': '0', 'one' : '1', 'two': '2',
               'three': '3', 'four': '4', 'five':'5',
               'six': '6', 'seven':'7', 'eight':'8',
               'nine':'9'}
    
    for char in s:
        if char.isdigit():
            answer += char
        else:
            temp += char
            if temp in num_dict:
                answer += num_dict[temp]
                temp = ''
                
    return int(answer)

👉 다른사람 문제풀이 1

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)

👉 다른사람 문제풀이 2

def solution(s):
    words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

    for i in range(len(words)):
        s = s.replace(words[i], str(i))

    return int(s)

👉 다른사람 문제풀이 3

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

    return int(s)
728x90
반응형