본문 바로가기
프로그래머스 C++/Level.1

프로그래머스 Level.1 자릿수 더하기

by yeni_0224 2023. 7. 4.
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
반응형