❗ 문제
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/courses/30/lessons/12947
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고,
18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
❓ 나의 풀이
function solution(x) {
let sum = String(x)
.split('')
.reduce((acc, num) => acc += Number(num), 0)
return x % sum === 0;
}
문자열로 변환하는 String, 문자열을 잘라서 배열로 반환하는 split, 배열의 값을 하나로 줄이는 reduce
를 이용해서 풀었다.
우선, 각 자릿수의 합을 구해야 하니까 String 으로 변환한 후, → "10"
split 메서드를 이용해 각 자릿수의 합을 더할 수 있게끔 배열로 만들어주었다. → ["1", "0"]
그다음 reduce 로 배열의 합계를 계산한다.
++) reduce()
배열의 모든 요소를 하나의 값으로 줄이는 함수이다. 두 개의 매개변수를 받는다.
- accumulator(누적값): 누적값을 저장하는 변수
- currentValue(현재값): 현재 처리 중인 배열의 요소
배열 요소에 대해 주어진 함수를 실행하며, 이 함수는 누적값을 업데이트한다.
예를 들어, 배열 ["1", "2", "3", "4"] 에 대해 reduce((acc, cur) => acc + cur, 0) 을 사용하면, (여기서 0은 acc 의 초기값임)
1. 첫 번째 요소 "1" 이 acc 의 초기값 0 과 더해져 acc 의 값이 1이 된다.
2. 다음요소 "2" 가 acc 값 "1" 에 더해져 acc 의 값이 3이 된다.
3. 그다음 요소 "3" 이 acc 값 "3" 에 더해져 acc 의 값이 6이 된다.
4. 마지막으로 요소 "4" 가 acc 의 값 "6" 에 더해져 acc 의 값이 10이 된다.
5. 결과적으로 배열 ["1", "2", "3", "4"] 의 합계인 10을 반환한다.
풀이 코드에서는 ["1", "0"] 배열에서 위와 같은 방식으로 1을 반환받는다.
반환받은 값을 sum 변수에 저장하고
sum 으로 x 가 나누어져야 한다고 했으니 나머지가 0인지 확인하면 된다. → x % sum === 0
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별 (Level 1, JavaScript) (0) | 2024.09.10 |
---|---|
[프로그래머스] 문자열 내 p와 y의 개수 (Level 1, JavaScript) (0) | 2024.09.09 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (Level 1, JavaScript) (0) | 2024.08.30 |
[프로그래머스] 약수의 합 (Level 1, JavaScript) (0) | 2024.08.27 |
[프로그래머스] 세균 증식 (Level 0, JavaScript) (0) | 2024.08.12 |