개인과제

알고리즘 코드카타 (약수의 개수와 덧셈)

choijming21 2024. 8. 30. 13:17

오늘은 알고리즘 코드카타 문제를 풀어보겠다~~!!

요즘 팀프로젝트 때문에 바빠서 알고리즘 문제를 풀었어도 블로그에 올리지 못했다ㅜㅜ

 

핑계......⭐

 

 

 

 

Q. 약수의 개수와 덧셈

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

 

< 제한 사항 >

  • 1 ≤ left ≤ right ≤ 1,000

 

< 입출력 예 >

left right result
13 17 43
24 27 52

 

 

< 입출력 예 설명 >

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

약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2

 

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

 

 

 

 

 

< 내가 푼 답 >

function solution(left, right) {
  let result = 0;
    
    for(let i=left; i<=right; i++) {
        if(Number.isInteger(Math.sqrt(i))) {
            result -= i;
        } else {
            result += i;
        }
    }
    return result;
}

 

코드 풀이:

1. 'result' 라는 변수를 선언하고 0으로 초기화 한다.

2. for 문을 사용해서 left 부터 시작해서 right 까지 1씩 증가시킨다.

3. if 문을 사용해, 먼저 Math.sqrt()를 사용해 제곱근을 구하고, 그다음 Number.isInteger()을 사용해 정수인지 확인한다.

4. 만약 제곱근이 정수라면 약수가 홀수이기 때문에 result 값에 i를 뺀다.

5. 제곱근이 정수가 아니라면 약수가 짝수이기 때문에 result 값에서 i를 더한다.

6. for문이 끝나면 result를 반환한다.

 

 

 

 

⭐  여기서 제곱근이 정수면 약수의 개수가 왜 홀수인지?

 

  • 약수의 쌍: 대부분의 경우, 약수는 쌍으로 존재한다. ex) 12의 약수: 1과 12, 2와 6, 3과 4 이렇게 쌍을 이루고 있다.
  • 제곱근의 특별한 성질: 그러나 제곱근이 정수인 숫자의 경우, 그 제곱근은 자기 자신과 쌍을 이룬다.
  • ex) 16의 제곱근은 4입니다. 16의 약수: 1, 2, 4, 8, 16
    • 1과 16이 쌍
    • 2와 8이 쌍
    • 4는 자기 자신과 쌍 (4 × 4 = 16)
    여기서 4(제곱근)가 자기 자신과 쌍을 이루기 때문에, 전체 약수의 개수가 홀수가 된다.
  • 따라서 제곱근이 정수라면, 약수의 개수는 홀수라고 말할 수 있다.
    • 9 (3²): 약수는 1, 3, 9 (3개)
    • 25 (5²): 약수는 1, 5, 25 (3개)