코딩 테스트/Python

[프로그래머스 코딩테스트 연습] 17. 자릿수 더하기

알밤바 2022. 3. 18. 09:00
728x90
반응형
 

코딩테스트 연습 - 자릿수 더하기

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 입출

programmers.co.kr


1) 문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

2) 제한사항

  • N의 범위 : 100,000,000 이하의 자연수

 

3) 입출력 예

입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

 


1. 문제 접근방식

n의 숫자를 문자열로 변경한 후에, answer에 담을 땐 다시 정수형으로 변경한다.

 

2. 풀이 코드

def solution(n):
    answer = 0
    
    for i in str(n):    # n을 문자열로 변경하여 for 문으로 하나씩 가져옴
        answer += int(i)  # answer에 담을 땐, 정수형으로 변경
        
    return answer

n을 문자열로 변경하여 for 반복문으로 하나씩 가져온다.

그리고 answer에 하나씩 더해주는데, 이때는 다시 정수형으로 변경한다.

 

def solution(n):
    answer = 0
    n = list(map(int, str(n)))  # 문자열로 변환한 n을 int로 다시 변환하여 list에 담아줌
    
    for i in range(len(n)):  
        answer += n[i]   # 리스트 n에 있는 값들을 하나씩 가져와 answer에 담음
        
    return answer

두 번째 코드는 map 함수를 사용한다.

map 함수는 리스트의 요소를 지정된 함수로 처리해주는 함수이다. → list(map(함수, 리스트)), tuple(map(함수, 튜플)) 

 

문자열로 변환한 n을 정수형으로 다시 변환하여 리스트에 담아둔다.

그리고 for문을 통해 리스트 n에 있는 값들을 하나씩 answer에 더해준다.

 

def sum_digit(number):
    if number < 10:
        return number;    # 한 자리 수일 때는 해당 값을 반환
    return (number % 10) + sum_digit(number // 10)   # 10으로 나누었을 때의 나머지(1자리의 값)과 몫(10자리 이후의 값)의 합

사실 이 문제는 위와 같이 풀라고 낸 문제이지 않나 싶다.

하지만 사람들은 더욱 편하게 문자열로 변경하여 푼 것 같은데, 이 방법도 좋은 듯하다.

 

해당 코드의 경우, 한자리 수일 때는 동일 값을 반환한다.

2자리 수 이상일 경우에는, 10으로 나누었을 때의 나머지(1의 자리 값)과 몫(10의 자리 이상의 값)을 각각 출력하여 더한다.

마지막 줄에서 'sum_digit(number // 10)' 해당 코드는 number가 100의 자리 수 이상일 때를 고려한 코드이다. 

 

3. 배운 점

int, str로 변환하는 것에 대해 알게 되었다.

전혀 이렇게 하는 것을 생각하지 못하고 있었는데, 다른 사람들의 코드를 보니 대부분 문자열로 변환하여 진행한 것을 볼 수 있다.

또 map 함수를 사용하여 변환을 해주었다. 예전에 파이썬 마스터 풀잎스쿨 때 공부한 적이 있었는데 이 함수가 이렇게 쓰일 줄이야! 다시 한 번 복습하고 갑니다 ㅎㅎ

 



728x90
반응형