Problem Solving/Programmers
[프로그래머스/python/Lv1] 숫자 문자열과 영단어
Bokoo14
2023. 12. 14. 16:39
- 코딩테스트 연습 > 2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어
- https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
numberString = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5','six': '6','seven': '7', 'eight': '8','nine': '9'}
def solution(s):
answer = 0
stringanswer = ''
tmpword = ''
for word in s:
if ord(word)>=97 and ord(word)<=122: # 문자라면
tmpword+=word
if tmpword in numberString:
stringanswer += numberString[tmpword]
tmpword = ''
else: # 숫자라면
stringanswer += str(word)
answer = int(stringanswer)
return answer
풀이
input을 돌면서 아스키코드를 사용해
문자열이라면? tmpword에 append해줌 -> 문자열만 뽑아내기
하나의 숫자를 가르키는 문자가 완성이 되었다면 stringanswer에 append해줌
숫자라면? stringanswer에 append해줌
input을 모두 순회하며 문자열인지 숫자인지 check하는 것이 solution
단점: 문자열을 계속 돌며 아스키코드로 변환해주며 문자인지 check해주는 것이 시간 소모, 임의의 변수에 계속할당해주는 것이 메모리 낭비
개선된 코드
def solution(s):
eng_num = {
"zero" : "0",
"one" : "1",
"two" : "2",
"three" : "3",
"four" : "4",
"five" : "5",
"six" : "6",
"seven" : "7",
"eight" : "8",
"nine" : "9"
}
# s 문자열안에 숫자영단어 있으면 숫자로 바꿔주기
for eng, num in eng_num.items():
if eng in s:
s = s.replace(eng, num)
return int(s)
풀이
딕셔너리 타입을 활용하여 key와 value값을 각각 eng과 num변수에 할당해줌
딕셔너리를 돌며, key값(영어 문자)이 input에 존재한다면 replace해줌 (영어 문자를 숫자로 / eng -> num)