[프로그래머스] LEVEL0 숨어있는 숫자의 덧셈 (2) 파이썬

그린·2023년 2월 13일
0

프로그래머스

목록 보기
1/28
post-thumbnail

[프로그래머스] 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번에서 런타임 에러가 났다.

  1. for문을 돌면서 해당 문자가 숫자이면 str에 추가한다
  2. 다음 문자가 알파벳이라면 연속된 숫자가 없으니 answer에 더해준다.
    2-1. answer에 더해주고 나서 str을 초기화해준다
  3. 다음 문자가 숫자라면 더하지 않고 다음 문자가 알파벳일 때까지 str에 추가해준다.
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를 벗어나지 않도록 코드 짜기

0개의 댓글