CodeWars 04: Calculating with Functions

김기욱·2021년 4월 1일
0

코딩테스트

목록 보기
40/68
post-custom-banner

문제설명

Find the sum of the digits of all the numbers from 1 to N (both ends included).

# N = 4
1 + 2 + 3 + 4 = 10
# N = 10
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + (1 + 0) = 46
# N = 12
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + (1 + 0) + (1 + 1) + (1 + 2) = 51

(예제참고) n까지 나열된 숫자 중에 두 자리 이상인 경우 자리 수 대로 쪼개서 더 한 숫자를 반환하고 총체적으로 더한값을 반환하라.

제한사항

None

입출력 예시

None

풀이

def compute_sum(n):
    n_list = list(range(1, n+1))
    result = [sum([int(i) for i in str(v)]) if v > 9 else v for v in n_list]
    return sum(result)
  1. 1부터 n까지 숫자가 담긴 리스트를 만듭니다.
  2. 9보다 큰 경우는 두 자리 수 이상인 정수이므로 문자열로 변환시키고 리스트 sum을 사용해 자리수로 쪼개서 더한 값을 반환합니다.
  3. 그럼 자동으로 [1,2,3,4,5,6,7,8,9,1,2,3,4....]이런식으로 구성된 리스트가 반환됩니다.
  4. SUM으로 더하고 반환해줍니다.

다른풀이

def compute_sum(n):
    return sum(map(int,''.join(str(n) for n in range(n+1))))
  1. list쓸 필요없이 range만 돌려도 iterable한 객체가 반환됩니다. 이를 문자열로 다 바꿔주고 join을 통해 뭉텅이로 담아줍니다.
  2. map을 통해 int로 형변환을 해주면 문자 하나 하나씩 int로 변환된 map 객체가 형성됩니다. map 객체 역시 iterable하기 때문에 list처럼 sum함수를 사용할 수 있습니다.
  3. sum으로 더 해주면 됩니다.

간결하고 유연한 사고력이 보이는 좋은 풀이법이였습니다. 🥰

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.
post-custom-banner

0개의 댓글