본문 바로가기
알고리즘

[항해99][프로그래머스] 자릿수더하기 in Javascript

by lucian 2022. 7. 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 하면 됩니다.

 


 내가 푼 풀이

 

 - 문제는 숫자형 변수의 자릿수마다 더해주는 문제

 - 로직이 2개 생각났다.

  - 1. 10의 배수로 n을 나눈 나머지 값을 answer에 축적한다.(물론 나눈 나머지값은 n에서 빼줘야함)

  - 2. 문자형으로 변환 후 배열로 풀고 요소마다 다 더하는 방법(reduce를 써야할 듯. 누적합이니깐)

 

1번 로직

function solution(n){
    // case 1
    let multiple_10=10
    var answer = 0;

    while(n/multiple_10!=0){
        let temp= n%multiple_10
        n-=temp
        answer+=temp/(multiple_10/10)
        multiple_10*=10
    }
    
    return answer;
    
}

 1. multiple_10 변수에 10을 할당한다. 변수 이름 그대로 여기서 계속 10을 곱해줄 것이다.

2. while문은 10의 배수로 n을 나눴을 때 0일 때까지 돌린다.
    (먼저 for문 보단 while문이 낫다 생각했다. 매개변수인 n이 얼마나 큰 수 인지 모르기에 for문처럼 고정적인 루팅에는 안맞다 생각함.) 

3. n을 10의 배수(multiple_10)으로 나눈 나머지 값을 temp에 임시 저장한다.

4. 나머지 값을 n에서 빼줘야한다. 그래야 다음 루틴 때 짤짤이가 없음.

   (예를 들어, 123에서 10을 나누면 나머지는 3이다. 이 나머지 3을 안뺏을 경우, 다음 루틴인 100을 나눠 나머진 23이 되므로 4번 과정을 거쳐야함)

5. 나머지값(temp)를 더하기 전에 10의 배수의 10을 나눈 값을 나눠준다.

   (120을 100으로 나누면 나머지는 20이다. 여기서 10의 배수인 2만 answer에 더해줘야하는데 그러기 위해서 현재 100인 mutliple_10에 10을 나눠 10의 자리수로 만들어 준 후 나머지값에 나눠주면 된다. 그러면 나머지값은 2가 된다.)

6. n의 값이 0이 될 때까지 반복한다.

 

 

2번 로직

function solution(n){

    // case 2
    let n_str=n.toString().split('')
    return n_str.reduce((acc,curr)=>acc+parseInt(curr),0)
}

1. toString()함수로 문자열 변환 후 split('')함수로 문자 배열 변환

2. reduce함수로 배열의 element들을 하나씩 더해준다. 이 때 element들의 타입은 문자형이므로 숫자형으로 바꾸는 parseInt() 형변환 함수를 사용하여 숫자로 변형 후 축적시킨다.

3. 그 결과값을 return한다.

댓글