본문 바로가기

두두의 알고리즘/문제

[기타] 프로그래머스 L1 '약수의 합' (Python)

728x90

<문제 링크>

https://programmers.co.kr/learn/courses/30/lessons/12928

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr


<문제 풀이>

1. n이 0 또는 1일 때 약수는 0과 1뿐이다.

2. 2이상 약수는 1을 반드시 포함하므로, 1부터 반복문을 돌린다.

3. n//i이 i보다 작을 때 반복문을 멈춘다. (ex. 12//4 < 4)

4. n//i이 i와 같고, n/i==0일 때 i 값을 더하고 반복문을 멈춘다. (ex. 4/2==2)

5. n/i==0일 때 i값과 n//i 값을 더한다. (ex. 12%3==0일 때, 3과 4를 더함) 

 

<코드>

def solution(n):
    answer = 0
    if n==1:
        return 1
    
    for i in range(1,n):
        if n//i < i:
            break
        elif n//i == i and n%i==0:
            answer += i
            break
        if n%i==0:
            answer += i
            answer += n//i
        
    
    return answer

 

<고쳐야 할 점>

  • 문제를 꼼꼼히 읽는다
  • 항상 0,1 주의
  • 복습 알고리즘