Algorithm/백준

[BOJ] 9506 - 약수들의 합

비번변경 2021. 11. 11. 19:57

문제

https://www.acmicpc.net/problem/9506

어떤 숫자 n이 자신을 제외한 약수의 합과 같으면, 그 수를 완전수라고 한다.

ex) 6 = 1 + 2 + 3

n이 완전수인지 아닌지 판단하는 프로그램을 작성하라.

각 줄로 숫자 n을 받고, -1을 입력으로 받으면 프로그램을 종료한다. n이 완전수이면 예시와 같은 형태(6 = 1 + 2 + 3)로 출력하고, 완전수가 아니면 "n is NOT perfect."를 출력한다.

 

풀이

n을 제외한 약수를 배열에 저장한 뒤, 그 합과 n을 비교한다.

import sys

while True:
    n = int(sys.stdin.readline()) # 입력
    if n == -1: # 프로그램 종료
        break
    # 약수 구하기
    f = []
    d = 1
    while d <= n / 2:
        if n % d == 0:
            f.append(d)
        d += 1
    # 출력
    print(f"{n} = " + ' + '.join(str(fs) for fs in f) if sum(f) == n else f"{n} is NOT perfect.")

 

 

이 풀이에서는 약수 배열을 while문을 이용해 구했는데, 리스트 컴프리헨션(list comprehension)을 이용해 구할 수도 있다.