문제 : 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

https://school.programmers.co.kr/learn/courses/30/lessons/12931

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


코드 1

function solution(N){
    let answer = [...String(N)].map(Number);
    return answer.reduce((acc, num) => acc + num);
}

 

이 문제는 숫자를 그대로 다루기 보단 문자열로 바꿔서 자릿수를 분리하는게 가장 간단하다.

 

1. 숫자를 문자열로 변환한 뒤, 한 글자씩 배열로 펼쳤다.

  • String(N) 으로 문자열을 만든다. N = 123, "123"
  • [...String(N)] 로 배열로 펼친다. ["1", "2", "3"]

 

2. 문자열 배열을 숫자배열로 변환하였다.

  • 문자열 상태에서는 더하기 연산이 되지 않기에 숫자로 변환한다.
  • map(Number) 로 "1" 을 1로 변환

 

3. reduce로 모든 숫자를 누적해서 더하였다.

  •  reduce((acc, num) => acc + num)
  • 누적값(acc)에 현재숫자(num)를 계속 더해 최종 합을 만든다.

< 궁금했던 점 >

map(Number)을 실행하면 새로운 배열을 만드는걸까?

=>  map(Number)는 원본 배열을 건드리지 않고 새로운 배열을 만들어서 거기에다가 변형된 값들을 담는다. 

let num1 = ["1", "2", "3"];
let num2 = num1.map(Number);

console.log(num1); // ["1", "2", "3"]
console.log(num2); // [1, 2, 3]
  • console.log(num1)에서도 알 수 있듯이 num1의 원본은 절대 바뀌지 않는다
  • map()은 항상 새로운 배열을 반환한다

<  이번 문제에서 배운 점 >

1. 숫자를 자릿수로 나누고 싶을 때 문자열로 반환하면 간단하게 처리할 수 있다

2. map(Number)는 원본 배열을 변경하지 않고 변환된 값들을 담은 새 배열을 반환한다

3. reduce()는 배열의 값을 누적해 하나의 값으로 합치는데 유용하다

+ Recent posts