(Lv.1) 연습문제_자릿수 더하기

duo2208·2022년 6월 27일
0

Algorithm

목록 보기
5/5
post-thumbnail

Link : 프로그래머스 > 연습문제 > 자릿수 더하기
Language : Python3


Keyward

💡 자리수 분리


Solution

  1. 문자열을 통해서 푸는 방식
  2. 정수형을 통해서 푸는 방식 ›› better

나의 코드

⑴ 문자열로 변환 후, 분리

  1. 정수 n을 문자열로 변환 뒤, 형변환을 하여 정수 리스트를 만든다.
  2. 리스트에 있는 원소들을 반복문을 통해 전부 합한다.
def solution(n):
    answer = 0
    arr = []

    for i in str(n):
        arr.append(int(i))

    for i in arr:
        answer += i

    return answer

처음 생각나는대로 적은 코드이다. 통과는 하지만 for loof 가 두 번이나 돌고있는 점에서 좋은 코드는 아니다.

⑵ map() 함수

def solution(n):
    answer = 0
    n = list(map(int, str(n)))
    
    for i in n :
        answer += i

    return answer

첫 번째 코드에서 형변환이 영 불편하게 느껴져서, map() 함수를 쓰면 되겠다 싶었다. map() 의 두번째 인자는 interable 해야하므로 str로 형변환 시켜주는 것만 주의하면 된다.

⑶ 나머지 계산 ›› better

  1. 입력된 숫자 n을 10으로 나눈 나머지를 구한다.
  2. 나머지를 answer에 더해준다.
  3. n을 10으로 나눈다.
  4. n이 0보다 크다면 1~3번을 반복한다.
def solution(n):
    answer = 0
    
    while n>0:
        answer += n%10
        n = n//10

    return answer

나머지 계산법도 생각나서 써봤다. 문자열로 푸는 방법보다 정수형으로 푸는 이 방법이 더 효율적이라 한다. 아무래도 문자열 방법은 형변환 때문에 속도가 더 느리다.


최적화된 코드

⑴ sum() 함수

정수 리스트에 sum() 함수를 이용하면 원소의 합을 구해준다.

def solution(n):
    return sum([int(i) for i in str(n)])

⑵ map() 함수

다른 사람의 풀이를 보고나니,
map() 함수 코드도 for문으로 원소들을 합할게아니라sum() 함수를 쓰면 한줄로 줄일 수 있었다.

def solution(n):
    return sum(map(int,str(n)))

⑶ 나머지 계산 : 재귀함수가 사용된 나머지 계산 ›› better

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

Note

sum()

sum() 은 Iterable인 list, tuple, dictionary의 합을 리턴하는 함수입니다. 숫자만 가능하며, 숫자가 아닌 객체가 있을 때 TypeError가 발생합니다

  • sum(iterable) : iterable의 합
  • sum(iterable, start) : start + iterable의 합

📌 참고

0개의 댓글