[파이썬][백준 9506번] 약수들의 합
1. 문제
[Bronze I] 약수들의 합 - 9506
성능 요약
메모리: 30840 KB, 시간: 96 ms
분류
수학(math), 정수론(number_theory), 런타임 전의 전처리(precomputation)
문제 설명
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
출처: 백준, https://https://www.acmicpc.net/
2. 해결방법 시간복잡도
- 단순 코딩 O(N^2)
3. 문제 해결 및 코드
-
주석을 참고하면서 이해를 돕습니다.
4. 알고리즘 및 해설
- while문을 통해 입력값이 -1이 아닌 경우 계속 반복한다.
- 1부터 입력값까지 tmp 리스트에 값을 넣는다.
- 위의 반복문이 끝난 이후 tmp 리스트의 합값이 입력값과 같다면 완전수이므로 해당 값을 문자로 출력한다.
- 이후에 반복문을 통해 리스트의 길이 -1까지 돌면서 리스트 내의 값들을 더하는 식으로 출력한다.
- 마지막 값은 더하는 표시가 출력되면 안되므로 따로 출력한다.
- 만약 while문중 해당 수가 완전수가 아니라면 해당 수를 문자로 출력하면서 is NOT perfect라고 출력한다.