EXCELSIOR

[Level1] 자릿수더하기 (sum_digit) 본문

Python/알고리즘_문제

[Level1] 자릿수더하기 (sum_digit)

Excelsior-JH 2016. 10. 15. 15:39

1. 문제

sum_digit함수는 자연수를 전달 받아서 숫자의 각 자릿수의 합을 구해서 return합니다.
예를들어 number = 123이면 1 + 2 + 3 = 6을 return하면 됩니다.
sum_digit함수를 완성해보세요.


2. 풀이


1) 내가 작성한 코드

1) - 1. 처음 풀이


def sum_digit(number):
    '''number의 각 자릿수를 더해서 return하세요'''
    num = str(number)
    sum = 0
    for i in range(len(num)):
        sum += int(num[i])
    return sum

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(sum_digit(123)));

1) - 2. 두번째 풀이
- 더 쉬운 코드가 없는지 찾아보다가 map( ) 함수를 찾았다. 먼저 소스코드를 보자
- 아래와 같이 매우 깔끔한 코드가 작성된다.

def sum_digit(number):
    '''number의 각 자릿수를 더해서 return하세요'''
    num = str(number)
return sum(map(int, num))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(sum_digit(123)));

2) 다른 사람 풀이

def sum_digit(number):
    if number < 10:
        return number;
    return (number % 10) + sum_digit(number // 10) 

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(sum_digit(123)));



3. 알아둘 것

1) map( ) 함수


# map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소가 함수 f에 의해 수행된 결과를 묶어서 리턴하는 함수이다.

# two_times.py
def two_times(numberList):
    result = [ ]
    for number in numberList:
        result.append(number*2)
    return result

result = two_times([1, 2, 3, 4])
print(result)
two_times 함수는 리스트 요소를 입력받아 각 요소에 2를 곱한 결과값을 돌려준다. 실행 결과는 다음과 같다.

#결과값: [2, 4, 6, 8]
#위의 예제는 map 함수를 이용하면 다음처럼 바꿀 수 있다.

def two_times(x): return x*2
list(map(two_times, [1, 2, 3, 4]))
#결과값: [2, 4, 6, 8]


2) Iterable(이터러블)

- Iterable 의 의미는 하나씩 요소를 넘겨줄 수 있는 객체를 말한다. (ex. list, tuple, str 등)

Comments