
#BOJ 9506 약수들의 합
while True:
n = int(input())
if n == -1:
break
divisor = []
for i in range(1, n):
if n % i == 0:
divisor.append(i)
if n == sum(divisor):
print(str(n), "=", " + ".join(str(x) for x in divisor))
else:
print(str(n), "is NOT perfect.")
코드 설명
앞부분은 백준 2501 약수 구하기 문제와 동일하다.
단, n이 완전수라면 n을 n이 아닌 약수들의 합으로 나타내어 출력한다고 하였으므로 for 문의 범위가 1부터 n+1이 아닌, 1부터 n까지여야 한다.
divisor에 들어있는 n이 아닌 약수들의 합이 n과 같으면 완전수이므로 6 = 1 + 2 + 3과 같은 형태로 약수들을 출력한다.
print()를 이용하여 여러 개를 값을 출력하고 싶은 경우 괄호 안에 들어갈 값들의 타입을 모두 문자열로 변경해주어야 한다. 위의 경우n이 int형이므로str()을 사용하여 문자열로 바꾸어주었다.
print()함수 내에서,를 이용하여 문자열을 연결하면 문자열 사이에 공백이 추가되지만+를 이용하여 연결하면 공백 없이 연결된다.
divisor에 들어있는 약수들을 출력하되, 숫자 사이에+를 넣어야하므로"".join()을 이용하여 나타낸다. 위와 같은 경우는" + ".join(str(x) for x in divisor)과 같이 나타낼 수 있다.