본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #9506: 약수들의 합

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

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

www.acmicpc.net

 

[문제 이해]

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 

ex) 6 = 1+2+3 →6은 완전수 / 12 ≠ 1+2+3+4+6 →12는 완전수 X

 

[문제 접근]

해당 숫자의 약수들을 모두 리스트에 넣고 그 리스트의 sum이 입력한 숫자와 비교한다.

리스트의 sum과 숫자가 같다면 6 = 1 + 2 + 3 이런 식으로 출력하고, sum이 입력한 숫자와 같지 않다면 12 is NOT perfect 이런 식으로 출력한다.

 

 

[정답]

 

1. while문을 무한반복으로 돌면서 -1을 입력하면 break한다.

2. 해당 숫자의 약수들을 저장할 num을 정의하고 해당 숫자를 n에 입력받는다. 답을 출력할 문자열 ans을 정의한다.

3. for문을 돌면서 약수들을 찾아내 리스트 num에 추가한다.

4. 만약 sum(num)==n 이라면, 'n ='을 ans에 추가하고 for문을 돌면서 약수들 더하기와 함께 추가한다. 그리고 첫번째 ' +'을 ''으로 바꾸어준다. ex) 6 = + 1 + 2 + 3 → 6 = 1+ 2+ 3 . 그런 다음 ans을 출력한다.

5. 만약 sum(num)!=n 이라면, '해당숫자 is NOT perfect.' 을 출력한다.