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

SeomIII·2021년 7월 16일
0

programmers_LEVEL1

목록 보기
30/34
post-thumbnail

문제 설명

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

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

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로 주어집니다.

문제 보기

생각 과정

1. for문을 돌면서 isdigit / isalpha 를 써서 숫자와 문자열을 나눈후,, 문자열을 비교해서 해봐야겠다.

2. 문자열을 나누는 방법은 숫자가 오면 그때 배열에 넣어주고 문자열을 다시 비우는 방법을 택했는데, 그러면서 문제가 생겼다.
--> foureight 이런 영어들이 붙어 있는 경우에는 어떻게 처리하지,,?

  1. 물론 이렇게 해서 풀 수 있는 방법이 있겠지만 막막하기도 하고 문자열에서 특정 문자열을 찾아주는 함수가 분명있지 않았나 싶어 구글링을 시도했다.

    4.찾은 것은 replace!! 문자열은 수정이 불가하니까 배열로 바꿔서 바꿔줘야하나? 라는 생각이 들었지만 가능한 함수가 있어 그 후로는 쉽게 풀었던 것 같다.

문제 풀이

def solution(s):
    table=['zero','one','two','three','four','five','six','seven','eight','nine']    
    
    for i in range(len(table)):
        s=s.replace(table[i],str(i))
           
    return int(s)

정답 풀이

✅ 이 문제는 2021 카카오 채용연계형 인턴십 코테 문제이기 때문에 카카오에서 정답을 제공해준다. 친절한,,카카오,,👍

문제에 제시된 내용을 충실하게 구현하면 풀 수 있는 문제입니다. 여러 접근 방법이 있을 수 있는데, 대표적인 방법은 다음과 같습니다.

  • for 문 등의 반복문을 사용하여 한 글자씩 읽으면서 숫자인 경우 그대로 출력하고, 알파벳 문자인 경우 zero~nine 중 해당되는 것이 있으면 숫자로 바꾸고, 아니면 다음 문자를 계속 확인하는 방식

  • 언어별 기본 라이브러리에 있는 문자열 replace 함수를 사용하는 방식

다른 풀이

def solution(s):
    answer = 0
    diction = ["zero","one","two","three","four","five","six","seven","eight","nine"]
    number = ""
    stack = ""

    for i in s:
        if i.isdigit():
            number += str(i)
        else:
            stack += i
            if stack in diction:
                number += str(diction.index(stack))
                stack=""
    answer = int(number)
    return answer

개선점

  • for 문을 이용할 시, 내가 놓쳤던 부분
    if stack in table:
    	number+=str(table.index(stack))
        	stack=""
profile
FE Programmer

0개의 댓글