Algorithm/프로그래머스 LV1
[프로그래머스] 약수의 개수와 덧셈 (Javascript)
집으로 감자
2025. 2. 2. 10:57
문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
요구사항
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한조건
1 ≤ left ≤ right ≤ 1,000
입출력
left right result 13 17 43 24 27 52
내가 생각한 로직
1. for문을 이용해서 left부터 right 이하까지 약수의 개수를 구하도록 한다.
2. while문 혹은 for문을 이용해서 1부터 해당 숫자 이하까지 나누면서 나누어 떨어지는 수를 구한다.
3. 빈 배열 안에는 해당 수의 약수가 들어가게 된다.
4. 배열의 길이가 짝수이면 해당 숫자를 더하고, 홀수이면 뺀다.
내가 구현한 코드
function solution(left, right) {
let sum = 0;
for (let i = left; i <= right; i ++) {
let arr = [];
let index = 1;
while (index <= right) {
if (i % index === 0) arr.push(index);
index ++;
}
arr.length % 2 === 0 ? sum += i : sum -= i;
}
return sum;
}
배열을 사용하지 않고 약수의 개수를 나타내는 count 변수를 이용해서, count가 짝수인지 홀수인지 판별해도 됐을 것 같다.
다른 해결방법
사용한 도구: for문, isInteger(), Math.sqrt()
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
제곱근이 정수이면 약수의 개수가 홀수다..
반응형