본문 바로가기

TIL/기록

[TIL] 09

문제 설명


자연수 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 하면 됩니다.

 

 

 

풀이

function solution(n)
{
    let sum = 0;
    
    // 어떻게 빼줄까? 문자열로?
    
   let num = n.toString().split("").map(Number);
    
    for(let i = 0; i < num.length; i++) {
        sum += num[i]
        
   }
    return sum;
}

 

어떻게 숫자의 각 자릿수를 더하는 방법이 있을까 했는데,

 

숫자는 인덱스로 직접 접근할 수 없어서 `num[i]`와 같이 사용하고 싶으면 해당 숫자를 문자열로 변환한 후에 인덱스로 접근해야 했다.

그리고나서 각 자릿수를 반복문으로 순회해야하고, 다시 숫자로 변환해 더해야했다.

먼저 파라미터 n에 toString()으로 문자열로 변환했고,

split 함수는 문자, 문자열을 'separator' 라는 구분자를 기준으로 잘라 리턴하니 string으로 변환된걸 잘랐다.

여기서 'separator'라는 구분자는 필수값은 아니지만, 만약 입력하지 않으면 문자열 전체를 배열에 담아 리턴한다. 

map 함수는 배열을 순회해 지정된 콜백 함수를 적용해 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행한다고 한다. 

그리고 나서 새로운 배열로 반복문을 돌렸다. num.length(처음 array.length라 써있는) 부분은 총 글자의 길이와 총 배열의 원소 갯수 등을 읽어준다.

 

나는 처음에 스트링을 생각하지 못해서 꽤나 오래 걸렸다.. toString을 생각하지못하고..

 

 

다른 사람들의 풀이를 봤는데 정말 쉽게 푼 사람들도 많았다.  

정수 n에 빈 문자열을 더해서 이렇게 간단하게 표시한 사람도 있었다.. !!

 

// 다른 사람의 풀이 과정

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

 

 

오늘 진짜 새삼 자바스크립트가 부족한게 많이 느껴졌다. 이렇게 끙끙대면서 문제를 풀고 있자니.. 시간은 계속가고.. ..

 

 

 

 

'TIL > 기록' 카테고리의 다른 글

[TIL] module import / export  (0) 2024.01.09
[TIL] 10  (1) 2024.01.08
[TIL] 08 sort() 함수  (1) 2024.01.04
[TIL] 07 프로그래머스  (0) 2024.01.03
[TIL] 06 문자열 정리  (0) 2024.01.02