Tiny Bunny
본문 바로가기
Algorithm/Python

[BOJ #9506] 약수들의 합

by nowag 2024. 2. 15.

문제

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

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

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

 

입력

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)

입력의 마지막엔 -1이 주어진다.

 

출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

 

내가 쓴 코드

import sys; input = sys.stdin.readline

number = int(input())
while number != -1:
    divisor = []
    for num in range(1, number+1):
        if number % num == 0:
            divisor.append(num)

    # 자신을 제외한 모든 약수들의 합과 같으면 (완전수이면)
    if sum(divisor)-number == number:
        print(number, '=', end=' ')
        # 잘하면 +.join 써서 구현 가능할 것 같음
        for div in range(len(divisor)-1):
            print(divisor[div], end=' ')
            if div != len(divisor)-2:
                print('+', end=' ')
        print()

    # 완전수 아니면
    else:
        print(f'{number} is NOT perfect.')

    number = int(input())

 

제출 결과

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[SWEA #11651] 큐 - 노드의 거리  (1) 2024.02.16
[SWEA #11650] 큐 - 피자굽기  (3) 2024.02.16
[BOJ #10828] 스택  (3) 2024.02.15
[SWEA #11649] 큐 - 회전  (0) 2024.02.15
[BOJ #2738] 행렬 덧셈  (1) 2024.02.15