Python/코딩도장 풀이 모음

[코딩도장] [Lv.1] 완전수 구하기

Dailybook406 2022. 5. 21. 00:00

[ 문제 ]

자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수를 완전수라고 한다. 예를 들면, 6과 28은 완전수이다. 6=1+2+3 // 1,2,3은 각각 6의 약수 28=1+2+4+7+14 // 1,2,4,7,14는 각각 28의 약수

입력으로 자연수 N을 받고, 출력으로 N 이하의 모든 완전수를 출력하는 코드를 작성하라.

 

[ 풀이 ]

# My solution
def divisor_sub_N(x) :    #1
    divisor = []
    for i in range(1,x) :
        if x % i == 0 :
            divisor.append(i)
    return divisor

N = int(input())    #2

result = []    #3

for i in range(1,N+1) :    #4
    if sum(divisor_sub_N(i)) == i :
        result.append(i)

print(result)

실행결과

500    # 입력값

[6, 28, 496]
더보기
# 베스트 풀이 방법
num= int(input("숫자를 입력하시오 : "))
print([x for x in range(1, num+1) if x==sum(y for y in range(1, x) if x%y==0)])

#1

def()함수를 이용하여 자신을 제외한 약수의 리스트를 만드는 함수를 생성한다.

 

divisor이라는 약수 리스트를 생성하고,

for반복문의 범위를 (1, x)까지 지정함으로써 자신을 제외한 숫자를 판단하고,
해당 숫자가 약수일 경우 divisor리스트 안에 추가한다.

 

입력받은 숫자 x를 어떠한 수(for반복문 속 i)로 나누었을 때, 나머지가 0이면 그 숫자는 약수임을 알 수 있다.

 

함수의 return값으로는 약수 리스트인 divisor을 반환받는다.

 

 

#2

자연수 N를 입력받는다.

 

 

#3

완전수를 담을 리스트(result)를 생성한다.

 

 

#4

for반복문의 범위는 (1,N+1)로 설정하여 자연수 N까지의 수를 판단할 수 있도록 한다.

 

위의(#1)에서 생성한 자신을 제외한 약수를 구하는 함수(divisor_sub_N)를 이용하여 완전수를 판단한다.

 

'자기 자신을 제외한 모든 양의 약수들의 합이 자기 자신이 되는 자연수'를 완전수라고 했기 때문에,

sum()함수를 이용하여 반환받은 모든 약수를 더한 결과를 자기자신(i)과 비교한다.

 

이때 만일 두 수가 같을 경우 생성했던 완전수 리스트(result)에 추가한다.

 


https://codingdojang.com/scode/539?answer_mode=hide 

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com