티스토리 뷰
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
끝 !
'coding test > 프로그래머스' 카테고리의 다른 글
[코딩테스트 기초] 문자열 여러 번 뒤집기 (0) | 2024.12.23 |
---|---|
[프로그래머스 Lv. 1] 실패율 (1) | 2024.12.18 |
[프로그래머스 Lv. 1] 비밀지도 (1) | 2024.12.17 |
[코딩테스트 입문] 최빈값 구하기 (0) | 2024.12.17 |
[코딩테스트 입문] 분수의 덧셈 (0) | 2024.12.16 |