발자취

[프로그래머스 Lv.1 / C언어] Day8. 자릿수 더하기 본문

코딩테스트/Daily Coding (C, C++)

[프로그래머스 Lv.1 / C언어] Day8. 자릿수 더하기

해린 2024. 5. 25. 00:29

2024. 05. 25 - 코딩테스트 스터디 Day8

 

 

01. 문제 설명

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

 

 

02. 제한사항

  • N의 범위 : 100,000,000 이하의 자연수

 

03. 입출력 예

N answer
123 6
987 24

 

04-1. 풀이 및 답 - C언어

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int answer = 0;
    
    while (n > 0) {
        answer += n % 10;
        n /= 10;
    }
    
    return answer;
}

내가 작성한 코드는 위와 같다.

 

n을 10으로 나눈 나머지를 answer에 더한 뒤, n을 10으로 나눈다.

이 작업을 n이 0보다 큰 동안 반복하면 된다.

 

 

 

04-2. 풀이 및 답 - C++

#include <iostream>

using namespace std;
int solution(int n)
{
    int answer = 0;
    
    while (n > 0) {
        answer += n % 10;
        n /= 10;
    }
    
    cout << "Hello Cpp" << endl;

    return answer;
}

C++도 코드가 거의 유사하다.

 

 

 

 

05. 다른 사람의 풀이

1) while 조건으로 n 넣기

while문 조건으로 그냥 n을 넣으신 분도 있었다. while(n)

 

2) 문자열로 바꿔서 풀기

문자열로 바꿔서 푸신 분도 봤는데 진짜 생각지도 못한 풀이 방식이라 신기했다.

#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;
}

문자 s[i]에서 '0'의 아스키값 48을 빼는 방식으로 풀이하셨다..

또 하나 배웠다..