한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
function solution(num_str) {
return num_str.split('').reduce((acc, cur) => {
return +acc + +cur;
}, 0)
}
JS로 풀 때는 배열 메서드 쫙쫙 돌려가면서 신나게 풀었었는데! 벨로그에 올렸던 기억이 없어서 빼꼼히 한 번 올려봄
def solution(num_str):
nums = []
sum = 0
for i in range(len(num_str)):
nums.append(int(num_str[i]))
for i in range(len(nums)):
sum += nums[i]
return sum
엉망으로 풀었다... 아직 for문도 잘 못 쓰는 초보임
일단 split() 함수로 어케 쪼개는지... 아직 사용법을 모르기 때문에 (공부할거임) for문을 두 번 돌렸다. 허허... 너무 부끄러운 풀이임... 기본 문법들 좀 다시 열심히 공부해야겠당
그냥 nums
배열에 num_str
의 0번 인덱스부터 끝까지 하나씩 넣어주고, 그 배열을 또 돌면서 sum에다가 더해서 최종 결과를 반환한다.
from functools import reduce
def solution(num_str):
return reduce(lambda acc, cur: int(acc) + int(cur), num_str, 0)
첫 번째 풀이를 제출하고 넘 답답해서 python의 reduce 함수를 찾아봤다. 내 사랑 reduce... 근데 이건 내장 함수가 아니라서 functools 모듈을 임포트해줘야 한다. 그렇게 reduce 사용법을 한 번 익혀보겠음.
reduce()
reduce(집계함수, iterable[, ...,초기값]
reduce() 함수는 반복가능한 객체(iterable: ex. list, dictionary, set, string) 내의 요소를 연산한 뒤 결과들을 누적해서 반환해주는 함수다.
JS에서의 reduce()랑 비슷하다. 집계함수는 두 개의 인자를 받아야 하는데 누적자(accumulator)와 현재값(current)이다. 초기값을 기준으로 루프를 돌며 데이터를 누적하여 연산한다.
이걸 람다 표현식을 사용해서 풀어봤다.
reduce(lambda acc, cur: int(acc) + int(cur), num_str, 0)
lambda
함수에 acc(누적값), cur(현재값) 두 개의 인자를 받도록 설정한 후 우리에게 주어진 문자열을 숫자열로 바꾸는 작업을 거친 후 acc와 cur을 계속해서 더해주는 함수를 첫 번째 인자로 넣어주었다. num_str
문자열 값을 넣어주었다. 그래서 num_str를 순회하면서 첫 번째 인덱스부터 마지막 인덱스까지의 문자열의 합을 구할 수 있게 했다.
앞으로도... 많이 사용해봐야지...
참고한 블로그
[파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식)
파이썬 reduce 함수 사용법
def solution(num_str):
return sum(map(int, list(num_str)))
num_str 자체가 iterable이기 때문에 list로 변환하는 작업은 꼭 필요한 것은 아니다.
map()
map(function, iterable)
map() 함수는 여러 개의 데이터를 받아서 각 요소에 함수(function)를 적용한 결과를 반환한다. iterable 객체를 입력으로 받을 수 있다.
solution=lambda s:sum(map(int,s))
같은 메서드를 사용하였지만 lambda 함수를 사용해서 풀이한 게 신기해서 가져옴... 연습해야징