Blair  - Soul Eater [파이썬 실력 테스트] 11. 약수구하기

• programming language/python

[파이썬 실력 테스트] 11. 약수구하기

oujin 2022. 8. 18. 12:07
728x90

●문제:

양의 정수 n을 입력한다.

양의 정수 n의 약수가 담긴 리스트를 출력한다.

 


def getMyDivisor(n):

    divisorsList = []

    for i in range(1, int(n**(1/2)) + 1):
        if (n % i == 0):
            divisorsList.append(i) 
            if ( (i**2) != n) : 
                divisorsList.append(n // i)

    divisorsList.sort()
    
    return divisorsList

n = int(input())

print(getMyDivisor(n))

 

10
[1, 2, 5, 10]

 

 

(ex. 10 = 2 * 5 )

N = A * B 로 나타낼 수 있다는 것을 이용한것입니다. (10 = 2 * 5 )

약수를 구하면 그 짝이 되는 수가 존재한다. (2,5)
for 문을 이용하여 N의 제곱근까지의 약수를 구하면 그 숫자의 짝이 되는 약수까지 구할 수 있게 됩니다.


하지만 N = A * B 일 때,  A == B 일 수 있습니다. (ex. 4 = 2 * 2 )

따라서 값을 중복해서(2,2) 넣어주지 않기 위해

if 문으로 제곱했을 때 n이 되지 않는지 검사를 진행합니다. (i**2) != n
혹은 i != (n // i) 로 검사도 가능합니다.
마지막에 sort()로 오름차순으로 정렬을 해준 후 return 해주면 됩니다.

 

 

 

 

출처: 예제 중심 파이썬 입문

궁금한 부분이 있으면 댓글 부탁드립니다^^

728x90