※2021 카카오 채용연계형 인턴십※
2021 카카오 인턴십 for Tech developers 코딩 테스트 해설
2021년 카카오의 여름 인턴십의 첫 번째 관문인 코딩 테스트가 지난 2021년 5월 8일에 4시간에 걸쳐 진행되었습니다. 이번 인턴 코딩 테스트에서는 5문제가 출제되었습니다. 이전과 동일하게 쉬운
tech.kakao.com
{{문제}}
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
영단어 | zero | one | two | three | four | five | six | seven | eight | nine |
※제한사항※
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
{{입출력 예}}
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
{{입출력 예 설명}}
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
- 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
입출력 예 #4
- s에는 영단어로 바뀐 부분이 없습니다.
※제한시간 안내※
- 정확성 테스트 : 10초
{{풀이}}
def solution(s):
res = ''
li = []
#1 문자와 숫자 분리하기
res = sepStrDigit(res, s)
#2 문자 분리하기
res = res.split()
li = sepStrings(res, li)
#3 문자 숫자에 대응하기
li = matchStr2Digit(li)
#4 결과 리턴하기
return int(''.join(li))
def sepStrDigit(res, s): # 문자와 숫자 분리하기
for i in range(len(s)):
if s[i].isdigit() == 0: #str
res += s[i]
elif s[i].isdigit() == 1: #digit
res = res + ' ' + s[i] + ' '
return res
def sepStrings(res,li): # 문자 분리하기
for i in range(len(res)):
if res[i].isdigit():
li.append(res[i])
else:
for j in dic.values():
if j in res[i]:
li.append(j)
li.append(res[i].replace(res[i], j))
#print(list(set(li)))
li = list(dict.fromkeys((li)))
return li
def matchStr2Digit(li): # 문자 숫자에 대응하기
for i in range(len(li)):
for j in dic.values():
if li[i] == j:
#li.append(get_key(j))
#del li[i]
li[i] = str(get_key(j))
break
return li
def get_key(val): # dic의 value에 대응하는 key 찾아 리턴
for key, value in dic.items():
if val == value:
return key
dic = {0:'zero', 1:'one', 2:'two', 3:'three', 4:'four', 5:'five', 6:'six', 7:'seven', 8:'eight', 9:'nine'}
##걸린 시간: 약 1시간
##테스트용은 맞았는데, 실채점에서 틀렸다ㅠ...왜 틀렸는지 고민 중😱😱
##회고
코테를 풀 때는 어떤 순서로 풀어나가려 했는지 주석으로 표기해둬야 흐름을 잊지 않는다.
선택한 해당 언어에 대한 이해도와 지식이 많을수록 좋다는 점과 개념을 탄탄히 해야 한다는 것.한번에 쭉 풀기보다 중간 중간 풀면서 원하는 중간 결과가 잘 나오는지 확인하며 진행할 것.
###풀면서 참고한 링크:
https://m31phy.tistory.com/130
[Python] 리스트 중복 제거 (순서 유지 X, 순서 유지 O)
Python에서 리스트의 중복을 제거하는 경우, 크게 두 가지 경우를 생각해볼 수 있다. • 리스트의 중복만을 제거하는 경우 ( 기존 리스트의 순서는 고려 x) • 리스트의 중복을 제거하되 기존 리스
m31phy.tistory.com
https://billnairk.tistory.com/100
[Python] 파이썬 리스트의 수정과 삭제
[ 파이썬 리스트의 수정과 삭제 ] 파이썬 리스트 안의 요소 값을 수정 또는 삭제 하는 방법을 알아보자. [ 리스트 값 수정 ] 1. 한개 값 수정 - 리스트의 수정할 값을 인덱싱 하여 수정한다. 2. 여
billnairk.tistory.com
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 코딩테스트연습 - DFS/BFS - 여행경로 (2) | 2024.10.08 |
---|---|
[프로그래머스]위클리챌린지1주차-부족한 금액 계산하기 (2) | 2021.08.03 |
[프로그래머스]정수내림차순구하기-Python3 (2) | 2021.07.29 |
[프로그래머스]소수개수구하기-Python3 (0) | 2021.07.29 |
[프로그래머스]약수의합-Python3 (0) | 2021.07.29 |