본문 바로가기
👩🏻‍💻 Front-end/👾 Algorithm

프로그래머스 - 약수의 개수와 덧셈 (Python)

by su-no 2022. 6. 14.

문제

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

 

코드

def solution(left, right):
    answer = 0
    
    num = [i for i in range(left, right+1)]

    for n in num:
        if n**0.5 == int(n**0.5):
            answer -= n
        else:
            answer += n
            
    return answer

 

풀이

약수는, 어떤 수를 나누어 떨어지게 하는 수를 말한다.

예를 들어 12의 약수는 1, 2, 3, 4, 6, 12가 되고, 각각 쌍을 이루어 1*12 / 2*6 / 3*4 = 12 를 만족하게 된다.

그렇다면 약수의 개수가 홀수라는 뜻은 그 수가 제곱근 정수를 갖고 있다는 말이 된다.

36의 경우 약수는 1, 2, 3, 4, 6, 9, 12, 18, 36이고, 1*36 / 2*18 / 3*12 / 4*9 = 36 는 쌍을 이루지만, 6*6은 자기자신을 제곱했을 때 36이 된다.

 

따라서 수의 제곱근이 정수인지 판별함으로써 문제를 해결할 수 있다.

-> n**0.5 == int(n**0.5) 만족하는 경우