문제 설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
입출력 예
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
카카오 채용 연계형 인턴십 문제로 출제된 문제입니다. 1단계 문제답게 전형적인 String다루기내용이였는데요, 문제는 복잡하지 않고 상당히 직관적이였습니다.
메인 챌린지는, 문자열로 쓰여진 숫자를 맵핑하여 숫자로 리턴해주는 것이였는데요. python 의 replace를 활용해 쉽게 풀 수도 있지만 로직을 코딩으로 옮기는 연습이기에 보다 직관적으로 문제를 풀어보도록 노력해보았습니다.
- 문자열 s를 순서대로 읽으면서 영어 숫자에 대응되는 문자열을 발견하면 영어--> 숫자로 변환
- 변환된 값을 Stack
- 리턴
먼저, 문자열의 substring이 영어 문자에 대응되는지 여부를 확인하기 위한 영어 숫자 팩토리 리스트를 선언하였습니다.
alphabet_num = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
이제 s의 문자열을 하나씩 읽으면서 문자열을 만들어갑니다.
예) "one4seveneight" 이 주어졌을 때, "o" -> "on" -> "one" => 1 처럼 문자열을 탐색하면서 대응되는 영어 숫자를 찾을 수 있습니다.
answer list에는 숫자가 차례로 담기며, 영어 숫자가 나온다면 'alphabet_num' list에서 대응되는 인덱스가 담기게 됩니다. 다만, 한 가지 신경썼던 점이라면, 문자열이 정수 즉, 숫자인 경우에는 추후 탐색이나 'alphabet_num' 에 대응되는 인덱스가 있는지 찾는 추가적인 로직을 검사할 필요 없으므로 continue를 통해 넘어감으로써 로직을 조금 간소화 시켜보았습니다.
def solution(s):
alphabet_num = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
answer = []
k = ""
for c in s:
if not c.isalpha():
answer.append(c)
continue
k += c
# check whether k is alphabetic number
if k in alphabet_num:
answer.append(str(alphabet_num.index(k)))
k = ""
answer = int("".join(answer))
return answer
'Programmers 풀이 > [KaKao]' 카테고리의 다른 글
[Python] 프로그래머스 2022 KAKAO 코딩테스트 - 신고 결과 받기 (0) | 2022.01.31 |
---|---|
[Python] 프로그래머스 2021 KAKAO 코딩테스트 - 메뉴 리뉴얼 (0) | 2021.08.23 |
[Python] 프로그래머스 2019 KAKAO 코딩테스트 - 오픈채팅방 (0) | 2021.08.22 |
[Python] 프로그래머스 2019 KAKAO 코딩테스트 - 실패율 (0) | 2021.08.21 |
[Python] 프로그래머스 2018 KAKAO 코딩테스트 - 추석 트래픽 (0) | 2021.08.09 |