728x90
728x90
아래의 문제는 프로그래머스에서 푼 2021 카카오 채용 코딩테스트 내용이며 코드는 직접 푼 내용입니다.
숫자문자열과 영단어
문제상황
요구사항
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다.
s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력
풀이과정
1. 영단어->숫자로 매칭시키기 위한 dict이 필요하다
2. 매칭된 결과가 필요하다. 문자열로, 이어붙이면 되겠다
3. 숫자면 읽은 그대로 최종문자열로 출력하면 되고, 영단어면 dict에서 찾아서 숫자로 출력한다.
최종문자열을 이어붙이는 식으로 만드니까, 초기화를 잘 생각해야한다..
4. return값은 숫자
결과
내가 푼 코드(정답)
def solution(s):
dict={} #치환할 값
en=['zero','one','two','three','four','five','six','seven','eight','nine']
for i in range(10):
dict[en[i]]=i
print(dict)
#{'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9}
result='' #최종 치환문자열
eng=''
for i in s: #문자열 하나씩 확인
if i.isdigit(): #숫자면 그대로
result=result+i
elif i.isalpha(): #문자면 치환작업
eng=eng+i #하나씩 이어붙임
if eng in dict.keys(): #이어붙이다가 숫자단어가 되면
result=result+str(dict[eng]) #dict에서 찾아서 치환
eng='' #하나씩 이어붙이는걸 다시 새로 시작할 수 있도록 초기화
return int(result)
또는 다른방식으로 푼 코드
다행히도 숫자가 indx의 번호랑 같다는 점을 활용할 수 있다!
그래서 인덱스와 그 값을 동시에 접근하기 위한 enumerate()를 쓸 수 있다.
2021.05.26 - [Python] 파이썬 enumerate 활용법 | for문을 파이썬스럽게
def solution(s):
en=['zero','one','two','three','four','five','six','seven','eight','nine']
answer = ''
for idx,num in enumerate(en):
if num in s:
s=s.replace(num,str(idx))
answer=s
return int(answer)
그래서 문자열안에 영단어가 있으면, 그 영단어를 인덱스 번호로 replcae하면 된다!
그렇게 단어 하나씩 검사를하고 교체를 다 한 최종s를 answer로 리턴하면 된다.
문자열을 이어붙이면서 영단어가 될때까지 하나씩 확인하는 것보다 한번에 영단어를 찾으니까 훨씬 빠르다
배운점
- 처음에 dict을 만들때 어떤걸 기준으로 뽑느냐를 생각해서 key랑 value를 지정해야하겠다.
- 영어단어와 인덱스번호가 같다면 enumerate()를 고려해보자
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[백준][파이썬]11659.구간합구하기4 - 구간합(접두사합) (0) | 2021.07.28 |
---|---|
[카카오][Python]메뉴리뉴얼 (1) | 2021.07.09 |
[카카오][Python] 키패드 누르기 (0) | 2021.07.09 |
[카카오][Python] 문자열압축 (0) | 2021.07.08 |
[백준][python]1920.수찾기 - 이진탐색 (0) | 2021.07.05 |
[python] 문자열매칭. KMP 알고리즘 (백준16916, 백준1786) (0) | 2021.07.05 |