본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 14563 완전수 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 28.
728x90
반응형

BaekJoon 백준 14563 완전수 문제는 진약수의 합이 자신인 수를 완전수, 자기 자신보다 작은 경우를 부족수, 자기 자신보다 큰 경우를 과잉 수라고 한다. 어떤 수가 주어질 때 이 수가 완전수인지, 부족수인지, 과잉수인지를 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 14563 완전수 문제 정보

출처

- https://www.acmicpc.net/problem/14563

알고리즘 분류

- 수학, 정수론

난이도

- 브론즈 1 / Bronze 1

 

완전수 문제 요약

  • 어떠한 자연수 N에 대해서 N을 제외한 약수(진약수)의 합이 N이 되는 자연수를 완전수라고 한다. 예를 들어, 6의 약수는 1, 2, 3, 6인데 1+2+3은 6이기 때문에 완전수이다.
  • 또 진약수의 합이 자기 자신보다 작은 경우를 부족수, 진약수의 합이 자기 자신보다 큰 경우를 과잉 수라고 한다.
  • 어떤 수가 주어질 때 이 수가 완전수인지, 부족수인지, 과잉수인지를 구하여 출력한다.
  • 완전 수면 ‘Perfect’, 부족 수면 ‘Deficient’, 과잉 수면 ‘Abundant’를 출력한다.
  • 자연수의 개수 T가 주어진다. T은 1000보다 작은 수이다.
  • 완전수인지 구해야 되는 자연수 N이 주어진다.(N <10000)

 

문제 풀이 과정

  1. 완전수인지 구할 자연수의 개수를 입력받는다.
  2. 자연수들을 입력받는다.
  3. 각각의 자연수들에 대해 진약수의 합을 구하기 위해, 자신을 제외한 자연수의 약수(진약수)를 구하여 모두 합한다.
  4. 진약수의 합과 자신을 비교하여 완전 수면 ‘Perfect’, 부족 수면 ‘Deficient’, 과잉 수면 ‘Abundant’를 출력한다.

 

코드 및 설명
T = int(input())
N = list(map(int, input().split()))
for n in N:
    sum = 0
    for i in range(1, n):
        if n % i == 0:
            sum += i
    if sum == n:
        print('Perfect')
    elif sum > n:
        print('Abundant')
    else:
        print('Deficient')

BaekJoon 백준 14563 완전수 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글