:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

N answer
123 6
987 24

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 설명 #1

문제의 예시와 같습니다.

:pushpin: 3-2) 입출력 예 설명 #2

9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

:four: 프로그래머스에서 제공한 코드

처음 프로그래머스에서 작성된 코드는 아래와 같다.

function solution(n) {
    var answer = 0;
    return answer;
}

:ledger: 문제 풀이

const solution = n => {
    const num = n.toString().split('').map(Number);
    return num.reduce((a, b) => a + b);
}

:one: 함수 선언

  • 화살표 함수를 사용하여 n 매개변수를 받는다.

:two: 풀이

  • 자연수를 배열로 만들기 위해 n.toString().split('')map(Number)메서드를 사용하여 숫자로 변환
  • 그리고 reduce()메서드를 사용하여 배열을 각각 합쳐준 후 반환한다.

:three: 결과 반환

  • 매개변수 n에 123을 대입하면 1+2+3 = 6
  • 매개변수 n에 987을 대입하면 9+8+7 = 24

:four: 실행

  • console.log(solution(123)) 실행하면 6가 출력된다.
  • console.log(solution(987)) 실행하면 24이 출력된다.

:fire: 다른 사람의 풀이 참고

이번 문제에서는 숫자를 배열로 만드는 방법을 몰라서 알아보았는데, 다른 사람의 풀이를 통해 다른 방법으로도 배열을 만드는 방법을 알게 되었다.
그리고 마지막에는 문자열 방지차원으로 parseInt 를 넣어주는 사람이 많아서 나도 이 부분까지 신경써야겠다.

  • (n+'').split('')
// [32명] reduce 메서드를 사용한 풀이방식
function solution(n){
    // 쉬운방법
    return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}

// [4명] for 반복문을 사용한 풀이방식
function solution(n)
{
    var a = (n + '').split('');
    var b = 0;
    for(var i = 0; i < a.length; ++i) {
        b += parseInt(a[i]);
    }
    return b;
    //return n.toString().split('').reduce((a, b) => (a * 1) + (b * 1));
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges