프론트엔드 개발자가 될거야./코딩테스트
[코딩테스트] 프로그래머스 약수의 개수와 덧셈 자바스크립트
정니정은니
2022. 10. 11. 11:34
이 문제는 풀이과정을 머릿속에 꼭꼭 저장해두고 싶다.
왜냐하면 많은 사실을 깨달을 수 있기 때문에!!!!!!👊🏻
이 문제를 풀기위해 먼저 알아야 할 것이 있다.
- Math.sqrt(16) = 4
: Math.sqrt(숫자)는 제곱근을 구해준다. (16의 제곱근 4)
- Number.isInteger(숫자)
: Number.isInteger(숫자)는 숫자가 정수면 true, 아니면 false
제곱근이 정수면 약수는 홀수이다!!!!!! => 머릿속에 넣자 "제곱근 정수 === 약수 홀수"
ex) 16의 제곱근은 4로 정수이다. ⇒ 약수의 개수 1,2,4,8,16 총 5개다. ⇒ 16의 약수 = 홀수
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예
입출력 예 설명
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
- 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
- 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
문제 풀이
- 방법1. "제곱근이 정수면 약수는 홀수"라는 공식을 몰랐을 때 접근할 수 있는 방법
// 약수를 세는 함수
function countMeasure(number) {
let count = 0
// 1부터 number까지 number를 나누어떨어지게하면 약수이므로 카운트
for (let i = 1; i < number + 1; i++) {
if (number % i === 0) {
count += 1
}
}
// 약수가 짝수인 경우 양수 리턴
if (count % 2 === 0) {
console.log(number)
return number
}
// 약수가 음수인 경우 음수 리턴
else {
console.log(-number)
return -number
}
}
function solution(left, right) {
let answer = 0;
// left부터 right까지 약수의 개수 세기
for (let i = left; i < right + 1; i++) {
answer += countMeasure(i)
}
}
- 방법2. "제곱근이 정수면 약수는 홀수"라는 공식을 알 때
function solution(left, right) {
let answer = 0;
for(let i=left; i<right+1; i++){
Number.isInteger(Math.sqrt(i)) ? answer-=i : answer+=i
}
return answer
}