문제
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

답안
while True:
# -1 이 나올때까지 input()을 반복입력하는 while 반복문을 만든다.
a = int(input())
if a == -1:
break
# arr라는 빈배열을 생성하고, input인 a의 1/2까지 반복하는 약수를 arr에 넣는 반복문 실행
arr = []
for i in range(1,a//2+1):
if a % i == 0:
arr.append(i)
# arr의 중복을 제거하고 정렬한다.
arr = list(set(arr))
arr.sort()
#만약 그 값이 a와 같다면 join을 이용한 6 = 1 + 2 + 3 출력
if sum(arr) == a:
print(f'{a} =', ' + '.join(str(i) for i in arr))
# 아니면 a is NOT perfect. 출력
else:
print(f'{a} is NOT perfect.')
후기
포매팅된 문자열 리터럴, join, while반복문을 사용할 수 있었던 문제였다.
728x90
'파이썬 코딩테스트' 카테고리의 다른 글
| 백준 9012번 - 괄호 (파이썬/Python) (0) | 2024.01.15 |
|---|---|
| 백준 11557번 - Yangjojang of The Year (파이썬/Python) (1) | 2024.01.14 |
| 백준 8958번 - OX 퀴즈 (파이썬/Python) (0) | 2024.01.12 |
| 백준 7567번 - 그릇 (파이썬/Python) (2) | 2024.01.11 |
| 백준 1920번 - 수 찾기 (파이썬/Python) (1) | 2024.01.10 |