본문 바로가기
파이썬 코딩테스트

백준 9506번 - 약수들의 합 (파이썬/Python)

by 준벨롭 2024. 1. 13.

문제

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