https://programmers.co.kr/learn/courses/30/lessons/81301
간략하게 문제를 설명하자면, 영어와 숫자로 섞여있는 문자열을 받아 순숫자(?)의 형태로 return 하는 것.
ex) "one4seveneight" → 1478 (not str!)
def solution(s):
arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tmp = ""
result = ""
for i in range (len(s)):
c = s[i]
if(c.isnumeric()):
result+=c
else:
tmp+=c
if tmp in arr:
result+=str(arr.index(tmp))
tmp=""
return int(result)
코드 설명 : for문으로 문자열을 돌면서 숫자면 바로 result에 추가하고, 문자면 임시 문자열에 추가해서 임시 문자열의 단어가 미리 정의해둔 배열 내에 존재하는 숫자 단어인지 확인 후 맞으면 최종 return 문자열에 추가한다. (아닐 경우엔 다시 for문을 돌아 else문으로 돌아와 단어가 완성 될 때까지 임시 문자열을 완성한다.
처음엔 이렇게 작성하지 않았었고 지하철에서 작성 후에 학교 와서 프로그래머스에서 실행 해보고 안되는 부분을 고친 코드다.
내가 잊었었고 몰랐던건,
내가 알았던 건,
def solution(s):
result = ""
tmp = ""
arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for j in s:
if(j.isnumeric()):
result+=j
else:
tmp+=j
if tmp in arr:
result+=str(arr.index(tmp))
tmp=""
return int(result)
for문으로 굳이 문자열에 인덱스로 접근할 필요가 없다.
처음 생각했던 대로 문자열 내에서 for문을 돌아서 문자를 하나씩 가져오면 편리!
첫번째 코드를 생각보다 빨리 작성해서 다른 풀이 방법이 없을까 생각하던중
replace() 함수가 있는지 없는지 잘은 기억 안나지만 있다면 매우 유용하겠군! 그리하여 replace() 함수를 찾아보고 작성한 두번째 코드.
def solution(s):
dic = {'zero':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8, 'nine':9}
for string, num in dic:
s.replace(string, num)
return s
와 replace 쓰니까 엄청 간단하네? 생각.
하지만 다 틀림.
def solution(s):
dic = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
for key in dic:
s = s.replace(key, dic[key])
return int(s)
틀린 부분을 모두 고쳐준 코드이다.
프로그래머스에서 코드를 입력하고 보니 이게 왠일? 두번째 코드가 모든 풀이에서 가장 상위에 있는 코드와 매우 유사했다. 기분이 좋았다.
정말로 파이썬 공부가 시급해지는 때이다.
딱 한달 전에 푼 문제였다. 지금 보니깐 간단하게 바로 생각나서 연습의 중요성을 깨닫는 중(아직 많이 부족하지만...)
다시 풀어보았따.
def solution(s):
arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i,c in enumerate(arr):
s = s.replace(c,str(i))
return int(s)
처음엔 enumerate 쓰지 않고 range써서 복잡하게 코드 작성했는데 enumerate를 사용하면 이렇게 편리하다니!
리스트나 문자열에서 인덱스와 요소를 함께 받고 싶으면 enumerate를 사용하면 편리하다.
열심히 공부하자
+) replace 함수의 인자는 변환 대상, 변환할 문자, 그리고 count! count를 지정해주면 count 갯수 만큼만 replace 된다. 예를 들어 'oxoxoxoxox'.replace('ox', '', 1) 이렇게 써주면 첫번째 ox만 로 replace 된다.