코테알고리즘공부

코딩테스트(2021 카카오채용연계형 인턴십 문제)

Yonggyu 2023. 6. 24. 18:24
반응형

숫자열과 문자열

문제설명

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

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

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


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

 

문제를 보면 함수에 문자열숫자를 넣었을 경우 전부 숫자로 변환해야한다.

그렇담 먼저 파이썬의 딕셔너리자료형을 활용하여 문자열숫자와 숫자를 묶어 전부 테이블에 담는다

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

이렇게 담은뒤 for문을 사용하여 문자열s가 숫자면 answer에 담는 if문을 짠다

for i in range(len(s)):
      if s[i].isdigit():
        answer += s[i]

isdigit()함수는 숫자면 true를 반환하는 함수이다.

각각 숫자들을 추가하여 대입하여야하니 +=를 사용하여 s[i]를 대입

 

 

그렇담이제 숫자가 아닌 문자열들을 숫자로 바꾸고 대입해야한다.

num_list 의 문자열 인지 차근차근 for문을 사용하여 zero부터 nine까지 확인한다.

else:
        for str, num in num_list.items():
         if s[i:i+len(str)] == str:
            answer += num

for문에서 str에는 문자, num에는 숫자들이 들어간다.

 

s[i:i+len(str)] 은 i부터 문자열의 길이까지이다.

이처럼 문자열을 for문으로 돌리면 zero인지 one인지 확인하게된다

그 즉시 answer에 더하여 대입

 

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

    answer = ""
    i = 0

    for i in range(len(s)):
      if s[i].isdigit():
        answer += s[i] 
      else:
        for str, num in num_list.items():
         if s[i:i+len(str)] == str:
            answer += num
        
    
    return int(answer)

전체 코드는 이렇다.

>>> print(solution(one2three4five))
12345

위처럼 함수 실행값이 잘나온다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형