티스토리 뷰

2021 카카오 채용연계형 인턴십 출제 문제


문제 설명


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

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

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

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

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


제한사항

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

입출력 예


입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

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

입출력 예 #4

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

제한시간 안내

정확성 테스트 : 10초


 

오늘의 기초 문제와 입문 문제들은 모두 손쉽게 풀고, 이제 무엇을 더 풀어볼까 하다가 발견한 카카오 기출문제. 레벨 1에 해당하는 카카오 코테 문제는 11개였다. 앞으로 하루에 하나씩 클리어하고, 추후에 레벨 2까지 도전해보자 ! 일단 오늘 푼 건, 정답률이 가장 높았던(72%) 문제를 골랐다. 

 

영어 단어를 해당하는 숫자로 바꾸는 메서드 함수가 따로 있는건 아닐까하고, 구글링할까 싶었지만 그래도 내가 아는 지식을 다 쏟아부어 구현해보자 ! 라는 생각으로 아주 기다란 코드를 구현하였다. 물론 실행은 실패했다. 우선 메서드가 없다는 가정하에, "zero"부터 "nine"까지 차례대로 리스트 lst를 만들었다. 리스트의 인덱스 번호가 해당 숫자가 될 수 있기 때문이다. 

 

그 다음, for문으로 s의 길이만큼 반복하는 i에 대해 s[i]가 정수인지 아닌지 (isdigit()) if문으로 확인한 뒤, 맞으면 pass, 아니면 다음 단계로 넘어간다. 두 번째 for문에서는 lst 길이만큼 반복하는 j에 대해, s 안에 lst[j]가 있는지 없는지 if문으로 확인한 뒤, 있으면 s.replace(lst[j], srt(j)) 이렇게 해당 문자를 j 인덱스로 대체하도록 구현하였다. 

 

작성한 코드는 다음과 같다. 에러가 마구 발생했다.

def solution(s):
    lst = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    for i in range(len(s)):
        if s[i].isdigit():
            pass
        else:
            for j in range(len(lst)):
                if lst[j] in s:
                    s = s.replace(lst[j], str(j))
    answer = int(s)
    return answer

 

만약 저 코드가 실행되었다고 해도, 제한시간에서 걸렸을 것 같다. for문과 if문이 난무하기 때문에 ...

 

이제 더 이상 고민은 힘들어서 지피티에게 물어봤다.

에러 원인은 중복 처리였다. replace를 반복문 내에서 동작되어 중복으로 변환이 이루어졌다고 한다. 무슨 말인지 느낌만 알겠고, 정확히 왜 ? 안되는건진 모르겠다. 아무튼 지피티는 요구하지 않은 해답까지 친절하게 알려주어, 내 머릿속에 정답이 박혀버렸다. 더이상 사고는 스탑 ..

 

최종적으로 성공한 코드이다.

결론적으로 for문은 하나면 쓰면 되고, replace만 잘 활용하면 아주아주 간단한 문제였던 것이다 ..^^ 그래도 이렇게 오랫동안 고민하여 문제푼게 오랜만이라 그런지 기분은 좋았다 ~

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

 

끝 !

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함