[BOJ / Python] 9506 약수들의 합

도니·2023년 4월 10일
0

BOJ / Python

목록 보기
57/104
post-thumbnail

문제

백준 9506 약수들의 합

코드

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

profile
안녕하세요, 🌱새싹개발자 도니💡입니다!

0개의 댓글

관련 채용 정보