#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)
과 같이 나타낼 수 있다.