코딩테스트 43일차

약수의 개수와 덧셈

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

function solution(left, right) {
  let answer = 0;

  for (let num = left; num <= right; num++) {
    let divisors = 0; // 약수의 개수를 저장할 변수

    for (let i = 1; i <= num; i++) {
      if (num % i === 0) {
        divisors++; // 약수를 찾으면 개수를 증가시킵니다.
      }
    }

    if (divisors % 2 === 0) {
      answer += num; // 약수의 개수가 짝수인 경우 더합니다.
    } else {
      answer -= num; // 약수의 개수가 홀수인 경우 뺍니다.
    }
  }

  return answer;
}

✏️풀이

let answer = 0;: answer 변수에 최종 결과를 저장합니다.

for (let num = left; num <= right; num++) {: left부터 right까지의 수에 대해 반복합니다. 반복문 변수 num은 현재 검사하고 있는 수를 나타냅니다.

let divisors = 0;: divisors 변수에는 num의 약수 개수를 저장합니다.

for (let i = 1; i <= num; i++) {: 1부터 num까지의 수에 대해 반복합니다. 반복문 변수 i는 현재 약수 후보를 나타냅니다.

if (num % i === 0) { divisors++; }: num을 i로 나누었을 때 나머지가 0이면, i는 num의 약수입니다. 따라서 divisors 변수를 증가시킵니다.

if (divisors % 2 === 0) { answer += num; } else { answer -= num; }: divisors의 값이 짝수이면 num은 약수의 개수가 짝수입니다. 따라서 answer에 num을 더합니다. 그렇지 않은 경우에는 num은 약수의 개수가 홀수이므로, answer에서 num을 뺍니다.

반복문이 종료된 후, answer 값을 반환합니다.

728x90
반응형
다쭐◠‿◠