1. 제목
프로그래머스 Level 1 자릿수 더하기(C++)
2. 문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
- N의 범위 : 100,000,000 이하의 자연수
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <iostream>
using namespace std;
int solution(int n){
int answer = 0;
while(n>0){
answer += n % 10;
n = n / 10;
}
return answer;
}
/*
사용자 입력을 받아 확인하고 싶을때(주석 지우고 실행)
int main(){
int num;
scanf("%d", &num);
printf("%d", solution(num));
}
*/
|
cs |
4. 해설
입력받는 수를 10으로 나누었을 때 남는 나머지를 더해주면 각 자릿수의 합은 구해진다.
다음을 보면 이해할 거라 생각한다. 우선 코딩하기전에 종이에 적어가면서 해보자
Ex)
우선 입력되어 들어온 1234를 10으로 나누어 보자
1. 몫은 123이고 나머지는 4이다.
몫의 123을 다시 10으로 나누면
2. 몫은 12이고 나머지는 3이다.
몫의 12를 다시 10으로 나누면
3. 몫은 1이고, 나머지는 2이다.
몫의 1을 다시 10으로 나누면
4. 몫은 0이고 나머지는 1이다.(종료)
n = 1234 //입력되어 들어온 수
answer = 0 + 4 (1234 % 10)
n = 123
answer = 0 + 4 + 3 (123 % 10)
n = 12
answer = 0 + 4 + 3 + 2 (12 % 10)
n = 1
answer = 0 + 4 + 3 + 2 + 1
n = 0(종료)
while(1234){
answer = 0 + 4(나머지)
n = 123(몫)
}
while(123){
answer = 0 + 4 + 3(나머지)
n = 12(몫)
}
while(12){
answer = 0 + 4 + 3 + 2(나머지)
n = 1(몫)
}
while(1){
answer = 0 + 4 + 3 + 2 + 1(나머지)
n = 0(몫) // n > 0 이라는 조건 에서만 돌아가기에 종료
}
5. 정리
<문제 핵심>
1. 나머지, 나누는 수(10), 몫을 이용한 숫자 놀이
2. 반복적인 나머지들의 합을 통한 자릿수의 합
<표 현>
1. 코드는 위 - > 아래 , 오른쪽 - > 왼쪽으로 실행
2. / - 몫 나눗셈
3. % - 나머지 나눗셈
4. // - 한 줄 주석
5. /**/ - 여러 줄 주석
6. 두 가지의 변수를 이용하는 것보다, 한 변수를 이용한 메모리 효율적 관리
문제 출처: 프로그래머스 코딩 테스트 연습, 프로그래머스
'● 프로그래머스 > Level1' 카테고리의 다른 글
[프로그래머스]Level1 핸드폰 번호 가리기(C++) (0) | 2020.06.23 |
---|---|
[프로그래머스]Level1 평균 구하기(C++) (0) | 2020.06.23 |
[프로그래머스]Level1 짝수와 홀수(C++) (0) | 2020.06.23 |
[프로그래머스]Level1 문자열 내림차순으로 배치하기(C++) (0) | 2020.06.23 |
[프로그래머스]Level1 자연수 뒤집어 배열로 만들기(C++) (0) | 2020.06.23 |
댓글