문제
어떤 숫자 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 |