https://school.programmers.co.kr/learn/courses/30/lessons/77884

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

 

 

  • 일반적인 수의 약수는 짝을 이루기 때문에 약수의 개수는 짝수이다.
  • 하지만 완전제곱수는 짝을 이루는 약수 사이에 "자기 자신과 짝을 이루는 약수"가 하나 추가로 존재한다. 예를 들어 9의 경우, (1, 9)와 (3, 3)처럼 짝을 이루지만, 3이 두 번 세어지지 않고 한 번만 세어지므로 전체 약수의 개수가 홀수가 된다.

 

즉 완전제곱수일 땐 빼고 아닌 경우엔 더한다.

def solution(left, right):
    answer = 0
    for num in range(left, right + 1) :
        sqrt_num = int (num ** (1/2))
        if sqrt_num ** 2 == num :
            answer -= num
        else :
            answer += num
    return answer

'알고리즘' 카테고리의 다른 글

하샤드 수  (0) 2024.11.21
시저 암호  (0) 2024.09.02
없는 숫자 더하기  (0) 2024.08.16
회문(palindrome)  (0) 2024.04.19
AVL 트리의 회전  (0) 2024.04.09

+ Recent posts