자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
N | answer |
---|---|
123 | 6 |
987 | 24 |
입출력 예 #1문제의 예시와 같습니다.
입출력 예 #29 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
✅ 답안 #1
function solution(n) {
let answer = 0;
let str = String(n);
for (let i = 0; i < str.length; i++) {
answer += Number(str[i]);
}
return answer;
}
💡 문제풀이 과정 #1
- Number type 즉, 숫자열에는
.length
를 적용할 수 없어서 자릿수의 합계를 낼 수 없다. 그렇기에 type을 String으로 바꿔주는 작업이 먼저 필요하다.- 그리고
for 반복문
을 통해 문자열의 index들을 모두 더해주는데, return하는 과정에서 다시 Number type으로 변환하기위해,Number()
를 사용하거나parseInt()
를 사용한다.
✅ 답안 #2
function solution3(n) {
return String(n)
.split("")
.reduce((acc, curr) => parseInt(acc) + parseInt(curr));
// .reduce((acc, curr) => Number(acc) + Number(curr));
// .reduce((acc, curr) => acc + curr * 1, 0);
}
💡 문제풀이 과정 #2
- 1번 풀이와 마찬가지로, Number type 즉, 숫자열에는
.length
를 적용할 수 없어서 자릿수의 합계를 낼 수 없다. 그렇기에 type을 String으로 바꿔주는 작업이 먼저 필요하다.- 다음은,
split()
을 이용하여 문자열을 배열로 바꿔준다. 배열의 값들을reduce()
함수를 통해 합계를 내준다. reduce의accumulator
와currentValue
를 그대로 더해주면 문자열이 되므로,Number()
혹은parseInt()
를 통해 Number type으로 변환한다.- 혹은
reduce((acc, curr) => acc + curr * 1, 0);
으로 풀이 하는 방법도 있는데 여기서 acc는 문자열, curr * 1은 정수가 된다.String * Number = Number
이기 때문이다. 하지만 curr의 경우는 문자열이므로, 이 경우String + Number = String
이라는 결과가 나올 것이기에 끝에initialValue
로서 0을 넣여주어 acc의 초기값을 Number type으로 적용시켜준다.- 만약
reduce((acc, curr) => acc + curr, 0);
과 같이 초기값만 설정 하게되면 acc는 정수, curr는 문자열 즉, Number+String 조합이 되기때문에 이 역시 문자열(String)이라는 결과물이 나온다. 즉, acc와 curr를 모두 숫자 타입으로 바꾸어줘야만 결과물 역시 숫자가 나오기 때문에, curr에 * 1을 하여 정수화해주고, 초기값 0을 설정해주어 acc역시 정수화 해주는 것이다.