[프로그래머스 / Python] 약수의 개수와 덧셈

Kaylee·2023년 9월 21일

programmers

목록 보기
2/6
post-thumbnail

문제 설명

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

나의 풀이

def divisor(n):
    if n == 1 :
        return 1
    elif n == 2:
        return 2
    cnt = 0
    for i in range(2,n):
        if n%i == 0:
            cnt+=1
    return cnt

def solution(left, right):
    answer = 0
    for i in range(left, right+1):
        if divisor(i)%2 == 0:
            answer += i
        else:
            answer -= i
    return answer

약수의 개수를 구하는 과정이 반복되기 때문에 이를 함수를 만들고, 호출했다. 왠지 약수의 개수와 관련한 공식이 있을 것 같지만 일단 모르기에.. 다소 비효율적인 듯한 코드를 짰다.

다른 사람의 풀이

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        if int(i**0.5)==i**0.5:
            answer -= i
        else:
            answer += i
    return answer

어떤 자연수를 제곱하여 나오는 수를 제곱수라고 하는데, 제곱수의 약수의 개수는 홀수라는 점을 이용한 코드다.

1 → 1
4 → 1, 2, 4
9 → 1, 3, 9
16 → 1, 2, 4, 8, 16

제곱수의 약수의 개수 몇 가지를 직접 확인해보면 이해가 더 쉽다.

0개의 댓글