Completion over Perfection

프로그래머스 - 약수의 합 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 약수의 합 (파이썬3 Python3)

난차차 2023. 8. 29. 11:04
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

아래 두가지를 해결하면 됩니다. 

 

① 주어진 n에 대해서 약수 리스트를 전부 구하고, 

② 그 리스트의 값을 전부 더해주면 됩니다. 

 

저는 나눠줄 값을 div로 선언한 뒤 1을 넣어주고 while문을 돌렸습니다. 

n을 div값으로 나눴을 때 0이 된다면 그 div값이 약수가 되기 때문에 이를 전부 더해줄 리스트 candidate에 넣어줍니다.

모든 계산이 끝난 후 candidate 안에 들어있는 요소들을 하나씩 꺼내주면서 answer에 더해주면 정답이 됩니다.

 

다만 주의해야할 점은 n이 16으로 주어졌을 때 약수는 4가 들어가게 되는데, 4를 2번 더하면 안된다는 것이죠. 

아래 반례를 한번 코드에 넣어서 실행해보세요. 

 

반례1> n이 16일 경우

입력 : 16
정답출력 : 31

반례2> n이 1일 경우

입력 : 1
정답출력 : 1

 

 

def solution(n):
    answer = 0
    div = 1
    if n == 1:
        return 1
    candidate = []
    while div < n:
        if n%div==0:
            if div not in candidate:
                candidate.append(div) # 1 2 3
                if n//div not in candidate:
                    candidate.append(n//div) # 12 6 4
            else:
                break
        div += 1
    
    # print(candidate)

    for num in candidate:
        answer += num
    
    # print(answer)
    
    return answer
반응형
Comments