문제
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)을 이용해 구할 수도 있다.