프로그래머스 코딩테스트 연습 - 약수의 개수와 덧셈 (JavaScript)
Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중,
[약수의 개수와 덧셈] 문제를 JavaScript를 사용하여 해결해 보도록 하겠습니다.
문제
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
입출력 예 설명
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
13 | 1, 13 | 2 |
14 | 1, 2, 7, 14 | 4 |
15 | 1, 3, 5, 15 | 4 |
16 | 1, 2, 4, 8, 16 | 5 |
17 | 1, 17 | 2 |
- 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
24 | 1, 2, 3, 4, 6, 8, 12, 24 | 8 |
25 | 1, 5, 25 | 3 |
26 | 1, 2, 13, 26 | 4 |
27 | 1, 3, 9, 27 | 4 |
- 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
작성한 답
solution.js
function solution(left, right) {
return Array.from({ length: right - left + 1 }, (_, i) => left + i)
.reduce((ac, v) => ac + (Number.isInteger(Math.sqrt(v)) ? -v : v), 0);
}
설명
먼저 left부터 right 까지의 모든 수를 담은 배열을 만드는 것으로 시작했습니다.
Array.from({ length: right - left + 1 }, (_, i) => left + i)
를 사용하여 left부터 right 까지의 모든 수를 담을 수 있도록 길이를 지정하여 생성하면서 각 요소들을 left부터 1 씩 증가하여 담았습니다.
그리고 해당 배열에 reduce를 사용하여 각 요소를 빼거나 더하여 결과를 얻을 수 있는데,
약수의 갯수를 구한 다음 홀수인지 짝수인지 알 수도 있지만,
어떠한 수의 제곱근이 정수면 약수의 갯수가 홀수이고, 정수가 아니라면 짝수라는 것을 이용하였습니다.
약수의 갯수가 홀수인지 짝수인지가 이 문제를 푸는 핵심이기에
저처럼 배열을 미리 생성하는 방법이 아니라 for 문을 사용한 반복문을 사용하시는 방법 등을 사용해서도 문제를 해결할 수 있습니다.
도움이 되셨다면 공감, 댓글 부탁드립니다!
궁금하신 점이나 요청사항은 언제든지 말씀해주세요!
피드백도 언제나 환영입니다!
감사합니다.
'Developer > Algorithm' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - 없는 숫자 더하기 (JavaScript) (0) | 2022.05.18 |
---|---|
프로그래머스 코딩테스트 연습 - 음양 더하기 (JavaScript) (0) | 2022.05.17 |
프로그래머스 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 (JavaScript) (0) | 2022.05.15 |
프로그래머스 코딩테스트 연습 - 최소직사각형 (JavaScript) (0) | 2022.05.14 |
프로그래머스 코딩테스트 연습 - 소수 만들기 (JavaScript) (0) | 2022.05.13 |
댓글