문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string 안의 모든 자연수들의 합을 return 하도록 solution 함수를 완성해줏요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어 있습니다.

 

입출력 예

my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16

 

내 풀이

def solution(my_string):
    answer = []
    number = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

    for i in my_string:
        if i in number:
            answer.append(int(i))

    sum = 0
    for i in answer:
        sum += i

    return sum

 

회고

  • 도대체 언제까지 이따위로 코드 쓸 생각?...
  • 문자열 my_string을 돌면서 숫자인 것(number 리스트의 요소에 포함되는 것)만을 answer 배열에 담았다.
  • 변수가 문자일 때만 가능하니까 number 리스트의 요소를 아예 문자로 썼고, 나중에 따로 int 함수를 입혀서 숫자로 다시 바꿔주었다.
  • 정리된 answer 배열(숫자인 것만 담겨 있음)의 합을 구해주었다.
  • 코드 개판이지만 그래도 여기까지는 정리함:
def solution(my_string):
    number = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    answer = [ int(i) for i in my_string if i in number ]
    sum = 0

    for i in answer:
        sum += i

    return sum
  • 인상 깊었던 풀이:  sum(int(i) for i in my_string if i.isdigit()) 
    • 문자열 my_string에서 숫자인 요소만 int형으로 바꾸어 합계를 구한다.
  •  isnumeric()  또는  isdigit()  함수를 썼으면 귀찮게 숫자 리스트를 따로 만들 필요가 없었을 듯
    • 이 둘의 차이점은 정확히 모르겠다
  •  for c in my_string: if c.isnumeric(): answer += int(c) 로만 썼어도 충분했겠군. 다들 천잰가
  • 그래도 모범답안이랑 생각한 모양새는 좀 비슷해서 다행이다.

 

 

 

 

복사했습니다!