본문 바로가기
백준

[백준] 9506번 : 약수들의 합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 23.
728x90
반응형

 

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. -1을 입력받았을 때 종료하기 위해 무한 반복문을 사용한다. while (True)
  3. 숫자를 입력받는다. n = int(sys.stdin.readline())
  4. 만약 -1을 입력했다면 종료한다. if (n == -1): break
  5. 그게 아니라면 약수를 저장할 리스트를 생성한다. li = list()
  6. 약수를 출력하기 위해 문자열로도 약수를 저장할 리스트를 생성한다. s = list()
  7. 1부터 n전까지 수를 불러오면 for i in range(1, n)
  8. 만약 불러온 수가 약수이면 if (n % i == 0)
  9. 해당 수를 리스트에 저장한다. li.append(i)
  10. 문자열 형식으로 바꿔서도 저장한다. s.append(str(i))
  11. 만약 약수의 합이 입력받은 수이면 if (sum(li) == n)
  12. 완전수이므로 n을 출력하고 이를 덧셈의 결과로 출력한다. print(n, end=' = ')  print(' + '.join(s))
  13. 완전수가 아니면 n을 출력하고 지정 문구를 출력한다. print(n, end=' ')  print('is NOT perfect.')
반응형

3. 소스코드

import sys

while (True):
    n = int(sys.stdin.readline())
    if (n == -1):
        break
    
    li = list()
    s = list()
    for i in range(1, n):
        if (n % i == 0):
            li.append(i)
            s.append(str(i))
    
    if (sum(li) == n):
        print(n, end=' = ')
        print(' + '.join(s))
    else:
        print(n, end=' ')
        print('is NOT perfect.')
728x90
반응형