백준 문제풀이/파이썬

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

꽌 2024. 2. 11. 03:58

문제 링크: 9506번: 약수들의 합 (acmicpc.net)

 

9506번: 약수들의 합

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

www.acmicpc.net


코드 구상

작성 코드

while True: 
    n = int(input())
    if n == -1:
         break
    cnt = 0
    num = [] 
    for i in range(1, n):
        if n % i == 0:
            num.append(i) 
            cnt += 1
    if sum(num) == n:
        print(str(n) + " =", end=' ')
        for k in range(cnt):
            print(num[k], end=' ')  
            if k != cnt-1:
                print("+ ", end='')  
        print()  
    else:
        print(str(n) + " is NOT perfect.")

알아간 점

1.출력할 때, 코드를 더 간단히 

  • 완전수를 출력하는 과정에서 코드를 더 간단히 하는 방법이 있을 것 같아 다른 사람들의 풀이를 참고하였는데 언패킹과 sep에 대해 알게 되었다.
  • 언패킹은 말 그래도 묶인 리스트들을 푼다고 생각하면 된다. *를 사용한다.예를 들어 a = [1, 2, 3]인 리스트가 있고 print(*a)를 하면 1 2 3 으로 출력된다.
  • sep은 end와 쓰임이 헷갈려 평소에 잘 활용하지 못했던 것 같다. sep은 출력할 요소들을 분리하는 역할로 각각의 요소 중간에 무언가를 넣어 줄 수도 있다. end는 출력하는 문자열의 마지막에 무엇을 넣을지 지정하는 역할을 한다. 파이썬에서 print() 함수는 출력 후에 줄바꿈을 수행되는데, end를 사용하여 변경할 수 있다.
  • 따라서 위 내용을 적용해 수정한 코드는 다음과 같다.
while True: 
    n = int(input())
    if n == -1:
        break
    num = [] 
    for i in range(1, n):
        if n % i == 0:
            num.append(i) 
    if sum(num) == n:
        print(str(n) + " =", end=' ')
        print(*num, sep=' + ')  
    else:
        print(str(n) + " is NOT perfect.")
  • 약수의 개수를 굳이 세도 되지 않고 출력이 가능하니 cnt 변수는 불필요하다. 따라서 삭제해주었다.
  • 출력 코드가 간단해지니 출력하고자 하는 것이 무엇인지 좀 더 쉽게 알아볼 수 있다.

 

 

 

*피드백은 언제나 환영입니다 :)