<로직 고민>
- 제일 먼저 든 생각은 딕셔너리를 활용해야겠다는 생각..ㅎㅎ...
- 전에 숫자와 문자열이 섞인 문자열을 숫자로 바꾸라는 거였나 암튼 비슷한 문제 있었는데 그렇게 풀 수 있을 것 같았다
- 입력값 s를 돌려서 int형으로 바뀌면 숫자니까 그대로 정답에 붙여주고 ValueError 뜨면 문자열이니까 한 단어씩 이어붙여서 딕셔너리 안에 있는 키 값과 일치하게 됐을 때 answer에 그 부분 딕셔너리의 밸류 값을 더해준다
- 이런 식..
<완성된 코드>
def solution(s):
answer, n = "", ""
num_en = {"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9}
for ss in s:
try:
int(ss)
answer += ss
except ValueError:
n += ss
if n in num_en.keys():
answer += str(num_en[n])
n = ""
return int(answer)
print(solution("one4seveneight")) # 1478
print(solution("23four5six7")) # 234567
print(solution("2three45sixseven")) # 234567
print(solution("123")) # 123
<다른 사람 풀이>
- 천재풀이1
num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"}
def solution(s):
answer = s
for key, value in num_dic.items():
answer = answer.replace(key, value)
return int(answer)
- 난 딕셔너리를 쓰면서...key()를 쓸 생각을 하면서 왜 items()는 생각하지 못 하는가...
- 근데 어차피 replace도 생각 못 했어서
- 이전에 다른 문제 풀 때 replace 생각했었는데....알고 있었는데...통탄스럽넹,,ㅋㅋ
- 그나저나 answer 굳이 선언할 필요없이 s로 써도 될 거 같다
num_dic = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"}
def solution(s):
for key, value in num_dic.items():
s = s.replace(key, value)
return int(s)
- 천재풀이2
def solution(s):
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i in range(len(words)):
s = s.replace(words[i], str(i))
return int(s)
- 오 리스트와 인덱스로 ~
- 천재풀이3
def solution(s):
numbers=['zero','one','two','three','four','five','six','seven','eight','nine']
answer=""
for idx, num in enumerate(numbers):
if num in s:
s = s.replace(num, str(idx))
answer = s
return int(answer)
- 이건 리스트와 이뮤멀레이트의 조합이군