본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

Programmers Lv.1 "약수의 개수와 덧셈"

Programmers Lv.1 약수의 개수와 덧셈, 월간 코드 챌린지 시즌2, 정답률 81%

요 문제는 매개변수로 주어지는 left와 right 사이의 범위 내에서 각 숫자에 대해 약수의 개수를 구한뒤 그 수가 짝수이면 더하고 홀수이면 빼면 된다. 즉, 약수를 구하는 부분을 따로 생각하고 전체 프로그램 구조를 아래와 같이 생각하면 된다.

def solution(left, right):
    
    def cntDivisor(number):
        divisor = [i for i in range(1, number+1) if number%i==0]
        if len(divisor) % 2 == 0:
            return 1
        else:
            return -1

    answer = 0
    for target in range(left, right+1):
        answer += cntDivisor(target)*target
    return answer