개발자 블로그

프로그래머스 - [2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 본문

알고리즘/프로그래머스

프로그래머스 - [2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어

hayongwoon 2022. 4. 30. 13:33

문제 설명

더보기

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

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

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

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

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자영단어
0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

제한사항

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

입출력 예

sresult
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.

제한시간 안내

  • 정확성 테스트 : 10초

 

나의 풀이

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

    answer = ''
    pos = ''
    for i in s:
        try:
            int(i)
            answer += i
        except:
            pos += i
            if pos in d.keys():
                answer += d[pos]
                pos = ''

    return int(answer)

1) 0-9와 문자를 키와 벨류로 나누어 딕셔너리 생성

 

2) 문자열을 for문으로 돌려 숫자는 바로 answer에 넣고 문자는 pos에 대입하여 해당하는 k에 존재할 때, 숫자로 반환하고 다시 pos를 정의!  

 

 

다른 사람의 풀이

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)

 

굳이 하나 씩 문자를 받아서 할 필요 없이 replace함수를 활용해서 값을 바꿀 수 있다.

 

참... 모르는게 많으면 몸이 고생하고 시간이 많이 소요된다. 잘 활용해서 시간을 아끼자!

replace 함수

2개의 매개 변수를 받는다. 첫번째는 교체 대상 두번째는 교체 될 값!

문자열 안에 해당하는 값(첫번째 매개변수)이 있는지 보고 그 값을 교체(두번째 매개변수로)