문제 설명
정수n
이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요
정답률이 87%이길래 쉬운 문제라고 생각했고, 문제 설명을 읽었을 때에도 쉽길래 '음, 쉬운 문제군 ㅋㅋ' 하면서 풀었다가 자꾸만 막혀서 자괴감을 주었다.
처음엔 이러한 방식으로 풀어나갔었다.
1. 일단 숫자n
을 배열에 넣어야겠다고 생각해서 spread syntax를 사용하였으나 TypeError: n is not iterable
가 나와 당황했다. 그래서 [...toString(n)]
으로 다시 썼었다.
2. 이후 배열을 순회하며 하나씩 더하려고 했으나 이는 두 수의 모든 경우의 값을 구하는 것이었다.
그러다가 다시 처음부터 생각해보자는 마인드로, 숫자를 배열에 "숫자로" 넣는 것부터 생각해보았다. spread syntax 말고는 하나도 생각이 나지 않아서 convert a number into an array로 검색하여 이러한 방법을 찾아냈다.
https://melvingeorge.me/blog/convert-number-to-array-javascript
위 링크는 숫자를 문자열로 배열에 넣는 방법, 숫자로 배열에 넣는 방법 두 가지 모두 나와있었고 나는 숫자를 배열에 넣는 방법을 사용하였다. 분명 from
메서드는 알고 있었는데 이럴 때 생각이 나지 않아 더 많이 공부해야겠다고도 생각했다.
숫자를 배열에 넣을 때에는 매개변수로 String(배열)
을 활용하며, 이를 숫자로 형변환하기 위해서는 Number
을 쓴다는 것을 배웠다.
이후, reduce
메서드를 활용하여 모든 수를 더하는 방법을 생각해냈고, 아래와 같이 제출하여 통과했다.
function solution(n) {
const nArr = Array.from(String(n), Number)
const answer = nArr.reduce((prev, curr) => prev + curr, 0)
return answer;
}
function solution(n) {
return n
.toString()
.split("")
.reduce((acc, cur) => acc + Number(cur), 0);
}
나도 처음에는 split('')
을 생각했으나 자꾸 되지 않았는데 이는 숫자를 문자열로 형변환하지 않았기 때문임을 알게 되었다. 숫자를 배열에 넣을 때에는 형변환을 하고 넣어야한다!는 것을 알게 된 문제였다.