프로그래머스 LV.1 “숫자

주소:

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

문제:


Neo와 Frodo는 숫자 게임을 하고 있습니다.

Neo가 Frodo에게 번호를 알려주면 일부 숫자가 영어 단어로 변환된 카드를 주고 Frodo는 원래 번호를 찾습니다.

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

  • 1478 → “1478”
  • 234567 → “23four5six7”
  • 10203 → “1제로투제로3”

이와 같이 숫자의 일부 자리가 영문이나 문자열로 변경되어 그대로 유지됩니다.

s는 매개변수로 지정됩니다.

풀기 함수를 완성하여 s를 의미하는 원래 숫자를 반환하십시오.

참고로 각 숫자에 해당하는 영단어는 다음과 같다.

숫자 영어 단어
0
하나 하나
2
4
5 다섯
6
7 세븐
8일 여덟
9 아홉

제한:

  • 1 ≤ 길이 s ≤ 50
  • s가 “0” 또는 “0”으로 시작하는 경우는 존재하지 않습니다.

  • 반환 값이 1보다 크거나 같고 2,000,000,000보다 작거나 같은 정수인 경우에만 유효한 입력입니다.

    s로 주어진다.

I/O 예시:

에스 결과
“원포세븐” 1478
“23four5six7” 234567
“2three45sixseven” 234567
“123” 123

I/O 예시 설명:

I/O 예제 #1

  • 샘플 문제와 같습니다.

I/O 예제 #2

  • 샘플 문제와 같습니다.

I/O 예제 #3

  • 3은 3, 6은 6, 7은 7이므로 정답은 I/O 예제 #2와 마찬가지로 234567입니다.

  • 다음과 같이 동일한 정답을 가리키는 문자열이 여러 개 있을 수 있습니다.

    B. 입력/출력 예제 #2 및 #3.

I/O 예제 #4

  • s에는 영단어 변화가 없습니다.

시간 제한 정보:

  • 정확도 테스트: 10초

해결 방법:

def solution(s):
    num = ("zero","one","two", "three","four","five","six","seven","eight","nine") #숫자를 문자로 담은 배열
    line = ""
    answer = ""
    
    for i in s:
        if i.isdigit(): #숫자면
            answer += i #answer에 그대로 넣기
        else: #숫자가 아니라면
            line += i #line에 넣기
            if line in num: #num의 배열 중 line이 있다면
                answer += str(num.index(line)) #그 index값의 위치를 answer에 넣기
                line = "" #line초기화
                
    return int(answer) #str형태인 answer값을 int형으로 바꿔 반환

솔루션 프로세스:

인턴십 연계로 2021 코코아 채용 문제

어려운 문제는 아니었지만 풀기 어려웠던 것 같습니다.

다른 사람의 솔루션:

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)

정육면체 형태의 숫자 배열 만들기

루프 및 교체 기능을 사용하여 문자를 변경했습니다.

보기 쉽고 빠른 수정처럼 보입니다.

사전 대신 목록을 사용하고 루프에서 enumerate() 함수를 사용하면 좋을 것입니다.