728x90
반응형
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
#include <iostream>
using namespace std;
int solution(int n)
{
int answer = 0;
while(n >= 10){
answer += n % 10;
n /= 10;
}
answer += n;
return answer;
}
while 문을 사용해서 10단위의 나머지 값을 더하면 된다고 생각했다
while 문 안 괄호에는 if문처럼 조건을 달아주면 된다.
answer = answer + n의 나머지 값
n = 123 / answer = 0
123 % 10 = 3 answer = 3
n = 123 / 10 = 12 n = 12
n = 12 / answer = 3
answer = 3 + 2(12%10) = 5 answer = 5
n = 12 / 10 = 1 n = 1
answer = 5 + 1 = 6
정확한 값을 확인하고자 값을 출력해보았다.
#include <iostream>
using namespace std;
int solution(int n)
{
int answer = 0;
while(n >= 10){
answer += n % 10;
n /= 10;
cout << "answer " << answer << endl;
cout << "n " << n << endl;
}
answer += n;
cout << "out of while answer " << answer << endl;
return answer;
}
테스트 1
입력값 〉 123
기댓값 〉 6
실행 결과 〉 테스트를 통과하였습니다.
출력 〉 answer 3
n 12
answer 5
n 1
out of while answer 6
테스트 2
입력값 〉 987
기댓값 〉 24
실행 결과 〉 테스트를 통과하였습니다.
출력 〉 answer 7
n 98
answer 15
n 9
out of while answer 24
처음에는 배열로 변환해서 풀려고 했지만 생각처럼 풀리지 않아서 찾은 해결법이다.
n을 문자열로 바꾼 후에 인덱스 값들을 모두 더해주면 자릿수를 더해주는 것과 동일하다고 생각했다.
#include <iostream>
#include <string>
using namespace std;
int solution(int n)
{
int answer = 0;
string s = to_string(n);
for(int i = 0; i < s.size(); i++) answer += (s[i] - '0');
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
cout << "Hello Cpp" << endl;
return answer;
}
문자열 하나를 왜 빼는가
728x90
반응형
'프로그래머스 C++ > Level.1' 카테고리의 다른 글
프로그래머스 Level.1 x만큼 간격이 있는 n개의 숫자 (0) | 2023.07.06 |
---|---|
프로그래머스 Level.1 평균 구하기 (0) | 2023.07.05 |
프로그래머스 Level.1 약수의 합 (0) | 2023.07.04 |
프로그래머스 C++ Level. 1 짝수와 홀수 (0) | 2023.07.04 |
프로그래머스 C++ Level. 1 정수 제곱근 판별 (0) | 2023.07.04 |