Programmers/Level 1

[Javascript] 프로그래머스 : 자릿수 더하기

emayom 2021. 6. 30. 00:33

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️

 

 

[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()