BOJ

[백준/BOJ] python 9506번 약수들의 합

kyj0015 2023. 1. 25. 21:36

언어: python

번호: 9506

제목: 약수들의 합

등급: 브론즈 1

풀이 과정:

숫자 n을 입력받아 -1일 경우에는 멈추고, 아니면 계속 입력을 받는다. n의 약수가 들어있는 리스트로 만들어 리스트의 합과 n이 같을 경우 약수들의 합으로 나타내어 출력하고, 아니면 n is NOT perfect.를 출력한다.

n의 약수를 구할때 모든 약수로 n을 나누면 짝이 나온다. 예를 들어 18의 약수는 (2, 9), (3, 6)이 짝이라 할 수 있다. 따라서 1부터 sqrt(n)까지의 약수와 그 짝을 구하면 된다.

코드:

# 9506 b
while 1:
    lst = []
    n = int(input())

    if n == -1:
        break
    for i in range(2, int(n**0.5)+1):
        if n%i == 0:
            lst.extend((i, n//i))
    lst.append(1)

    if sum(lst) == n:
        lst.sort()
        print(n, "=", end=' ')
        print(*lst, sep=' + ')
    else:
        print(n, "is NOT perfect.")

 

 

메모:

append() > 리스트에 그대로 입력한다. 리스트에 리스트를 넣으면 2차원 리스트가 된다.

extend() > 리스트에 요소만 입력한다. 리스트에 리스트의 요소만 들어가 1차원 리스트가 된다.

print(*list) > 리스트의 요소가 차례대로 출력된다. for문으로 출력하는것보다 간단하다.