[Javascript] 프로그래머스 : 자릿수 더하기
⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
[Javascript] 프로그래머스 Level1 _ 자릿수 더하기
👇🏻문제링크
🔍 정답
👇🏻
시행착오
( + 코드를 작성하면서든 생각들.)
1.
정수 n을 .toString() 혹은 Number()을 통해 문자열로 변환한 후
선언한 배열에 하나씩 정수로 변환한 후 대입한 후
.reduce()를 통해 배열의 합을 구해서 리턴했다.
이렇게 하니 거치는 단계는 너무 많고 비효율적인 것 같았다 ㅠㅛㅠ
function solution(n){
var str = n.toString();
var strArr = [];
for(let i=0; i<str.length; i++){
strArr.push(parseInt(str.charAt(i)));
}
return strArr.reduce((x,y)=> x+y);
}
2.
그래서
.toString().split('')을 통해 자릿수 하나씩 answer에 배열의 각각 문자열로 넣었다.
이후로는 동일하게 정수로 바꿔줘봤당ㅎ ㅎㅎ,, 아직 부족하다!
function solution(n){
var answer = n.toString().split('');
for(let i=0; i<answer.length; i++){
answer[i] = parseInt(answer[i]);
}
return answer.reduce((x,y)=> x+y);
}
3.
문자열 배열을 또 하나씩 숫자로 변환하고
거기에 .reduce()까지 써서 합을 리턴하는 것만큼 복잡할 필요가 없을 것 같아서
.reduce 대신 for of를 사용해서 sum에 배열 전체를 더했다.
왜인지 보는데 마음이 편하다ㅎㅎㅎㅎ 난 이게 좋은 것 같다.
function solution(n){
var answer = n.toString().split('');
var sum = 0;
for(let i of answer){
sum += parseInt(i);
//sum += Number(i);
}
return sum;
}
4.
for of를 forEach()로 바꿔봤다.
forEach()는 리턴값이 없기때문에 answer의 요소만 사용해서 sum에 누적했다.
그리고 동일하게 sum을 리턴했다.
function solution(n){
var answer = n.toString().split('');
var sum = 0;
answer.forEach((el) => { sum += Number(el)});
return sum;
}
얘는 동일한데 따로 answer에 담지않고 n에 그대로 다시 담아서 forEach를 돌렸다!
function solution(n){
var sum = 0;
n = n.toString().split('');
n.forEach((el) => { sum += Number(el)});
return sum;
}
5.
마지막으로 다른 분께서 풀이하신 것을 참고하려고 가져왔다.
아주 ,,, 짤막하지만 깔끔해보여서 !!
function solution(n) {
return n.toString()
.split('')
.reduce((acc, curr) => acc + Number(curr), 0);
}
mdn을 참고해서 위의 코드를 풀어서 작성해봤다!
리듀서 함수를 이렇게 따로 선언?해서 반환 값을 누산기에 할당해서 하나의 값으로 만든다!
그리고 .reduce(reducer, 0) <= 0 처럼 초기 값을 지정해주어야한다!
위에 다른 풀이 처럼 sum=0으로 초기화하고 누적하여 더하는 것이랑 같은 것!!
근데 -1로 지정하니까 숫자들이 문자열로 쭈루룩 합해진다...!
function solution(n) {
const reducer =
(acc, curr) => acc + Number(curr);
//accumulator, currentValue
return n.toString().split('')
.reduce(reducer, 0);
}
👉🏻 MDN / Array.prototype.reduce()