알고리즘: 약수의 개수와 덧셈

Kyoorim LEE·2022년 12월 28일
0

알고리즘TIL

목록 보기
27/40

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ left ≤ right ≤ 1,000

입출력 예

leftrightresult
131743
242752

입출력 예 #1

다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

약수약수의 개수
131, 132
141, 2, 7, 144
151, 3, 5, 154
161, 2, 4, 8, 165
171, 172

따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

풀이

  • left에서 right 까지의 수 구하기
  • 각 수의 약수의 개수 구하기
  • 약수의 개수에 따라 양수/음수로 구분하기
  • 총 합계 구하기

풀이 1

// 약수 구하는 함수
function divisor(n) {
    let count = 0; 
    for(let i =1; i <= n; i++) {
        if(n % i === 0) count ++
    }
    return count;
}

function solution(left, right) {
    let result = 0;
    
    for(let i = left; i <= right; i++) {
        let count = divisor(i)
        
        if(count % 2 === 0) result += i
        else result -= i
    }
    return result;
}

풀이 2

제곱근이 정수면 약수의 갯수는 홀수임을 이용하기.
ex) 9의 제곱근은 3. 9의 약수는 1, 3, 9이므로 홀수.

Number.isInteger()

인자로 들어오는 값이 정수인지 아닌지를 판별함

function fits(x, y) {
  if (Number.isInteger(y / x)) {
    return 'Fits!';
  }
  return 'Does NOT fit!';
}
console.log(fits(5, 10)); // expected output: "Fits!"
console.log(fits(5, 11)); // expected output: "Does NOT fit!"
function solution(left, right) {
	let answer = 0; 
  	for(let i = left; i <= right; i++) {
    	if(Number.isInteger(Math.sqrt(i))) answer -= i;
        else answer += i
    }  
    return answer;
}
profile
oneThing

0개의 댓글