728x90
반응형

1. 문제점

프로그래머스 알고리즘 문제풀이 - 자바스크립트 [자릿수 더하기]

2. 시도해본 것들

일반 숫자를 문자열로 만들고, 배열로 만들고, 다시 숫자로 바꿔야하나.....

깔끔하지 않아보이지만 내가 할 수 있는 유일한 방법이란 생각도 들었고

다시 개념정리 하기 위해 사용해보았다.

3. 해결과정

n은 임의의 숫자

//  숫자를 문자열로 변경
    const str = String(n);  
//  문자열을 배열로 변경
    const newArr = Array.from(str)

// 배열값을 숫자로 변경

    answer += Number(newArr[i])

4. 알게 된 점

 

나의 문제풀이

function solution(n) {
    var answer = 0;
//  숫자를 문자열로 변경
    const str = String(n);  
//  문자열을 배열로 변경
    const newArr = Array.from(str)
    
    for (i=0; i<newArr.length; i++){
// 배열을 숫자로 변경
        answer += Number(newArr[i])
    }
    return answer

}

타입변경하며 폭풍 노가다..!

 

남의 문제풀이

function solution(n) {
  return n
    .toString() //숫자의 문자화
    .split("") // 배열화 ["1","2","3","4"]
    .reduce((sum, str_num) => sum + Number(str_num), 0);
    
    //reduce함수는 누적시켜가는 내장함수로 생각하자
	//sum에 합계로 받을 시작점 0을 넣어준다.
    //str_num은 누적시켜갈 숫자를 더해야하는데 문자열 "1" 상태니 숫자화 시킨다
    //0에서 시작하여 배열의 내용을 모두 숫자화해서 더하면 끝
}

 

reduce가 뭔지 몰라서 검색 했을 때 다음과 같은 예시가 나왔다.

 

const arr1 = [ 1, 2, 3, 4, 5 ];
arr1.reduce((a, b) => a + b); // 15

 

그런데 마지막에 0은 없어서 팀원에게 질문했더니 acc의 시작값이라고 했다.

첫번째 인자는 일종의 let sum = 0 과 같은 거고,

reduce는 누적시켜주는 함수라고 생각하면 된다고 했다.

 

현재 문자열을 배열화한 상태로 ["1", "2", "3"[

이런식으로 들어가 있기 때문에 합계부분은 acc는 0 (숫자)

그 뒤 cur에는 "1" , "2" 가 들어가기에 Number로 숫자화해서 더해주면 된다. 

728x90
반응형

+ Recent posts