[프로그래머스] LEVEL0 숨어있는 숫자의 덧셈 (2)
✅문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
✅제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
- 문자열에 자연수가 없는 경우 0을 return 해주세요.
def solution(my_string):
answer = 0
str = ''
append=[]
for i in range(len(my_string)) :
if my_string[i].isalpha() != True :
str+=my_string[i]
if my_string[i+1].isalpha() == True :
answer += int(str)
str=''
return answer
처음 작성한 코드.
테스트 케이스는 통과했지만 정확성 테스트에서 2번부터 7번에서 런타임 에러가 났다.
def solution(my_string):
answer = 0
str = ''
append=[]
for i in range(len(my_string)) :
if my_string[i].isalpha() != True :
str+=my_string[i]
if i+1==len(my_string) or my_string[i+1].isalpha() == True :
answer += int(str)
str=''
return answer
다 맞은 코드
i+1이 문자열의 길이를 초과했을 경우를 생각해주지 않아서 난 오류였다.
해당 문자가 숫자이자 마지막 문자인 경우에도 더하게 코드를 수정하여 해결하였다.
def solution(my_string):
s = ''.join(i if i.isdigit() else ' ' for i in my_string)
return sum(int(i) for i in s.split())
문자가 숫자인지 판단하여 숫자이면 s에 추가하고 알파벳이면 공백을 추가하여 했다. 그 후 공백으로 구분하여 숫자를 추출한 코드이다. 알파벳을 공백으로 대체하는 코드도 가능할 것 같다.
훨씬 짧고 직관적인 코드
문자열이나 배열을 이용하여 for문을 돌 때 index를 벗어나지 않도록 코드 짜기