본문 바로가기
코딩 테스트/알고리즘

알고리즘 13번 - js, c++

by GREEN나무 2024. 11. 13.
728x90

URL : 

문제

더보기

문제

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

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


JS

계획

n을 문자열로 만들고 숫자의 배열로 바꾸고 함산하기S

문제

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

제한사항

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

 

계획

n을 문자열로 만들고 숫자의 배열로 바꾸고 함산하기


참고, 풀이

▷ 오답

function solution(n){
    var sum = 0;
    let strN = n.toString(10);
    return strN.reduce((sum, n) => sum + n, 0)
}

strN은 배열이 아니라 문자열이기에 풀어줘야 합니다( [...strN])

strN에서 추출한 n은 문자기에 숫자로 타입을 바꿔야 합니다. 그리고 'n'은 매게변수의 문자로 쓰이고 있으니 변수명을 바꿉니다.( Number(num))

 

▷ 음수도 처리하는 방법(값을 양수로 바꾸고 문자열 처리)

function solution(n) {
    let strN = Math.abs(n).toString(10); // 음수도 처리 가능
    return [...strN].reduce((sum, digit) => sum + Number(digit), 0);
}

음수도 처리하려면 Math.abs(n)을 사용해 양수로 변환하면 됩니다

 

 

▷  다른 방법 : n을 10으로 나눈 나머지 값을 더하기

function solution(n)
{
    let sum=0
    while (n>0){
        sum += n%10
    }
    return sum;
}

오류 : 실행 시간이 10.0초를 초과하여 실행이 중단되었습니다. 실행 시간이 더 짧은 다른 방법을 찾아보세요.

 


function solution(n){
    let strN = n.toString(10);
    return [...strN].reduce((sum, num) => sum + Number(num), 0);
}

 

do wile방법으로 하니 실행시간이 단축되었습니다.

function solution(n){
    var sum = 0;

    do {
        sum += n%10;
        n = Math.floor(n/10);
    } while(n > 0);

    return sum;
}

 

코드 간략화하기

숫자를 문자를 변환하면서 배열로 각 자리수를 분리해도 오류가 않나네...

function solution(N) {
    return [...String(N)].reduce((sum, digit) => sum + +digit, 0);
}

1. String(N): 숫자 N을 문자열로 변환합니다.
2. [...String(N)]: 문자열을 배열로 변환하여 각 자릿수를 분리합니다.
3. reduce: 배열의 각 자릿수를 순회하며 숫자로 변환(+digit)한 값을 누적합산합니다.

       'sum + +digit`은 문자열 `digit`을 숫자로 변환한 뒤 누적합(`sum`)에 더하기 위한 간결한 표현입니다.

      sum + (+digit)과 같은 표현입니다.
4. 초기값 0: 누적합이 시작되는 기본값입니다.


출처 

do wile방법 : https://themarketer.tistory.com/68

숫자 -> 문자열 : https://ashen99.tistory.com/234

reduce : https://ashen99.tistory.com/256


 

◆ C++

계획

숫자 -> 문자열 -> 배열 만들고 배열 내의 문자를 숫자로 바꿔서 모두 더한다.


참고, 풀이

 

int형을 char배열에다가 넣으려면?
sprintf()를 이용하면 된다

int num = 3;
char str[15];
sprintf(str, "%d", num);

 

 

 


#include <iostream>
#include <string>

using namespace std;

int solution(int n)
{
    int answer = 0;
    string str = to_string(n);
    for (char c : str) {
        answer += (c - '0');
    }
    return answer;
}

다른사람 답

#include <iostream>

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

참고

int 형변환

https://8156217.tistory.com/28

 

문자열 -> 문자배열

https://cryptosalamander.tistory.com/7

 

int -> 문자배열

https://www.techiedelight.com/ko/convert-a-string-to-a-char-array-in-cpp/

 

 

 


 

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

알고리즘 15번 - 추가공부  (0) 2024.11.18
알고리즘 14번 - 추가공부  (0) 2024.11.13
알고리즘 12번 - JS, C++  (0) 2024.11.13
알고리즘 11번-JS, c++  (2) 2024.11.13
알고리즘 10번 - js, c++  (0) 2024.11.12