최대 1 분 소요

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. 해결방법 시간복잡도

  1. 단순 코딩 O(N^2)

3. 문제 해결 및 코드


  • 주석을 참고하면서 이해를 돕습니다.

4. 알고리즘 및 해설

  1. while문을 통해 입력값이 -1이 아닌 경우 계속 반복한다.
    • 1부터 입력값까지 tmp 리스트에 값을 넣는다.
    • 위의 반복문이 끝난 이후 tmp 리스트의 합값이 입력값과 같다면 완전수이므로 해당 값을 문자로 출력한다.
    • 이후에 반복문을 통해 리스트의 길이 -1까지 돌면서 리스트 내의 값들을 더하는 식으로 출력한다.
    • 마지막 값은 더하는 표시가 출력되면 안되므로 따로 출력한다.
  2. 만약 while문중 해당 수가 완전수가 아니라면 해당 수를 문자로 출력하면서 is NOT perfect라고 출력한다.