문제 설명
자연수 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 하면 됩니다.
문제풀이
문제를 읽자마자 가우스님이 생각났다.
등차수열.. 뭐 이렇게 더하고 저렇게 더하면 주어진 숫자의 총 합이 나온다.
ex) (x, y)
(x + y) * (( y - x ) + 1) / 2
요 공식이다.
공식까지 찾아서 바로 시작했으나 예시(N값) 입력 값을 숫자가 아닌 배열로 시도하여 코드 제출 할 때마다 틀렸다.
문제를 잘 읽어야 하는데 어렸을 때부터 이랬음
숫자 예문을 나누기 위해 찾아봤으나 숫자를 나누는 메서드는 없는거 같아 문자로 변환 하는것을 먼저 했다.
문자 변경 후 하나씩 반복문을 통해 값을 가져온 뒤에 더하는 방식을 택했다.
function solution(n)
{
var answer = 0;
let aa = n.toString(); // 숫자를 문자로 바꿈
for(let i=0; i< aa.length; i++) { //바뀐 문자에서 하나씩 반복문
answer += Math.abs(aa[i]) // Math.abs를 사용하여 절대값으로 변경 후 더함
}
return answer;
}
solution(123)
알고리즘 3일차만에 내머리로 문제를 해결하는 날이 왔다.
물론 엄청나게 간결하고 좋은 알고리즘은 아니였으나 해결에 의미를 둔다.
팀원분의 코드 줄이기가 인상깊어 나도 생각을 해봤는데 ... 여기까진 아직 무리인건지 안됐다.
일단 다른분의 풀이들을 보겠다.
다른문제 풀이 방법
function solution(n){
// 쉬운방법
return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}
이번에도 역시나 한줄코드를 성공하신 분들 ... 대단합니다.
코드 풀이를 해보자면
이분도 숫자를 문자로 변경한 다음 split()를 사용해서 문자인 123을 1, 2, 3으로 나누고 그것을 reduce()로 더해준다.
몰랐는데 (N + '')을 해도 문자로 변경이 된다
윗줄은 숫자 밑줄은 문자
이렇게도 사용할 수 있다는 것을 또 배우고 간다.