코딩테스트 연습 - 자릿수 더하기
자연수 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 함수를 사용하여 변환을 해주었다. 예전에 파이썬 마스터 풀잎스쿨 때 공부한 적이 있었는데 이 함수가 이렇게 쓰일 줄이야! 다시 한 번 복습하고 갑니다 ㅎㅎ
'코딩 테스트 > Python' 카테고리의 다른 글
[프로그래머스 코딩테스트 연습] 21. 두 개 뽑아서 더하기 (0) | 2022.03.21 |
---|---|
[프로그래머스 코딩테스트 연습] 19. 문자열 내 마음대로 정렬하기 (0) | 2022.03.20 |
[프로그래머스 코딩테스트 연습] 16. 2016년 (0) | 2022.03.17 |
[프로그래머스 코딩테스트 연습] 15. 나누어 떨어지는 숫자 배열 (0) | 2022.03.16 |
[프로그래머스 코딩테스트 연습] 14. 문자열 다루기 기본 (0) | 2022.03.15 |