본문 바로가기

2024 코딩테스트 스터디

[8주_1일차] 프로그래머스-약수의 개수와 덧셈(Python)

문제 설명

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

 

제한사항
  • 1 ≤ left  right ≤ 1,000

 

<코드>

def solution(left, right):
    answer = 0
    
    for number in range(left, right + 1):
        count = 0
        
        for i in range(1, number + 1):
            if number % i == 0:
                count += 1 #약수의 개수 구하기
        
        if count % 2 == 0: #약수의 개수가 짝수인 경우
            answer += number
        else:
            answer -= number #약수의 개수가 홀수인 경우
    
    return answer

 

<풀이과정>

-약수의 개수를 하나하나 구하고 개수가 짝수/홀수인 경우를 계산

 

<다른 풀이방식>

-제곱근까지의 범위만 계산하기(약수는 항상 큰 약수와 작은 약수로 짝을 이루므로)

 

for i in range(1, int(number**0.5) + 1):
    if number % i == 0:
        if i * i == number:
            count += 1
        else:
            count += 2

 

  • if i * i == number: 만약 i가 number의 약수일 때, i와 number / i가 같은 경우 (즉, i가 number의 제곱근인 경우)에는 두 약수가 같은 숫자이므로 count를 1만큼 증가
    (예: 36의 경우, 6이 제곱근이므로 약수 6이 두 번 카운트되지 않도록 count를 1만큼만 증가)
  • else: count += 2: i와 number / i가 서로 다른 약수일 경우, count를 두 번 증가
    (예: 36의 경우, 1과 36, 2와 18, 3과 12 등으로 쌍을 이루는 약수들)