주제1 | divisors |
작성이유 | 참고하기 위해 |
문제상황
상황 |
문제설명 : 임의의 수 left 부터 right까지 돌리면서 이 중에서 약수의 갯수를 구하고, 그 약수의 갯수가 짝수이면 임의의 수를 더하고, 짝수가 아니라면 그렇지 않으면 뺌 => left 부터 right 까지의 수를 더하고 빼서 결과를 나타내야함. -- 내가 생각한 수식 function solution(left, right) { var answer = 0; for (let i=left; i <=right; i++){if (divisors(i)%2 ===0){answer +=i}else{answer -=i}} return answer; } |
해결방법1 | function divisors(num) { let count = 0; for (let i = 1; i <= Math.sqrt(num); i++) { if (num % i === 0) { count += 2; // i와 num/i 두 개의 약수를 추가 if (i * i === num) count--; // i가 num의 제곱근인 경우 중복 제거 } } return count; } function solution(left, right) { var answer = 0; for (let i = left; i <= right; i++) { if (divisors(i) % 2 === 0) { answer += i; // 약수의 개수가 짝수인 경우 더하기 } else { answer -= i; // 약수의 개수가 홀수인 경우 빼기 } } return answer; } |
해결방법 풀이 | 이유 : divisors라는 함수의 정의가 필요함
|
해결방법2 | 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; } 풀이 number.isInteger() : 주어진 값이 정수인지 확인 => 약수의 값 (Math.sqrt(i))가 정수인지 확인하는 수식 |