문제 : 자연수 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()는 배열의 값을 누적해 하나의 값으로 합치는데 유용하다
'문제 풀이기록 > JavaScript' 카테고리의 다른 글
| [프로그래머스 / Level1] 약수의 합 (JavaScript) (0) | 2025.12.28 |
|---|---|
| [프로그래머스 / Level 1] 평균 구하기 (JavaScript) (0) | 2025.12.28 |
| [프로그래머스 / Level 1] 문자열 내 p와 y의 개수 (JavaScript) (0) | 2025.12.27 |
| [ Js ] 나머지 구하기 / 프로그래머스 (0) | 2025.08.24 |
| [ Js ] 두 수의 곱 구하기 / 프로그래머스 (3) | 2025.08.24 |