728x90
https://programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스에서 카카오 기출 문제인 '숫자 문자열과 영단어'를 풀었다.
처음엔 10가지 경우로 나눠서 if문을 만들어야 하나 생각했는데 며칠 전에 사용한 replace가 생각나서 사용해 보고자 했다. 또 딕셔너리에서 items()를 사용하면 키와 값을 모두 가져올 수 있으니 for문으로 해결할 수 있을 것 같았다.
첫번째 시도
### 틀린 코드 ###
## 잘못된 코드 ##
def solution(s):
answer = 0
string = {'zero' : '0', 'one' : '1', 'two' :'2', 'three' :'3', 'four' : '4', 'five' :'5',
'six' :'6', 'seven' : '7' , 'eight' : '8', 'nine' : '9'
}
if s.isdigit == False : ## s.isdigit()이 맞는 사용법!! ()를 빼 먹어서 제대로 작동하지 않았음.
for i, j in string.items() :
s = s.replace(i,j)
answer = int(s)
else :
answer = int(s)
return answer
파이썬에 isdigit은 문자열 내에 숫자만 존재한다면 True를 반환하고 숫자가 아닌 다른 문자열이 있다면 False를 반환한다. 이걸 이용해 입력되는 s에 숫자가 아닌 다른 문자열이 있다면 딕셔너리를 for문으로 반복하게끔 했다.
하지만 이렇게 코드를 실행시키면 replace가 전혀 되지 않았다. if문이 제대로 작동하지 않았다는 건데 왜 작동이 안되는진 모르겠다...
-> 추가 수정
isdigit 뒤에 ()를 빼먹었었다 ㅋㅋㅋㅋ 아니.. 이걸 빼먹는다고...? 어이없지만... 이런 자잘한 실수도 줄여야하는데..
아무튼 if s.isdigit() == False로 바꾸었더니 문제없이 잘 작동했다!
그래서 if문 없이 그냥 for문만 돌려봤더니 실행이 잘 되었다.
두번째 시도
def solution(s):
answer = 0
string = {'zero' : '0', 'one' : '1', 'two' :'2', 'three' :'3', 'four' : '4', 'five' :'5',
'six' :'6', 'seven' : '7' , 'eight' : '8', 'nine' : '9'
}
for i, j in string.items() :
s = s.replace(i,j)
answer = int(s)
return answer
if문 없이 그냥 for문으로 딕셔너리를 반복시켰더니 무사히 실행이 되었다.
마지막엔 출력이 문자열이 아닌 int형으로 되어야 하기 때문에 형 변환을 해주었다.
728x90