본문 바로가기
프로그래밍/코딩 문제 풀이

프로그래머스 2024.01.16 (1Lv 자릿수 더하기)

by Rozentea 2024. 1. 16.

문제


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

제한사항
   ◈ N의 범위 : 100,000,000 이하의 자연수

입출력 예
N answer
123 6
987 24

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

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

코딩


#include <iostream>
#include <string>

using namespace std;
int solution(int n)
{
    int answer = 0;

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    cout << "Hello Cpp" << endl;

    string strnum = {};
    strnum = to_string(n);

    for (size_t i = 0; i < strnum.length(); ++i)
    {
        answer += (strnum[i] - 48);
    }

    return answer;
}

 

해당 문제를 풀기 위해서 주어진 수의 각 자리수들을 알아야 한다.

N의 크기가 모두 동일하다면 기본 연산자들을 이용해서 자리 수를 구할 수 있으나, N의 범위는 100,000,000 이므로 모든 자리수를 반복문을 이용해 찾으려면 시간이 너무 오래걸린다.

 

때문에 생각해낸 방법은 string을 이용하면, 수의 각 자리수마다 문자열의 각 원소에 담기기 때문에 주어진 정수 N을 문자열로 변경해, 문자열의 길이만큼 idx에 접근하여 해당 수만큼 더 해나가면 쉽게 풀 수 있었다.

 

이때, 문자열의 각 원소는 char 형태로 저장되기 때문에 원하는 정수 형태로 바꿔주기 위해서 48을 빼주었다. (아스키코드표 참고)

실행 결과