백준 9506번: 약수들의 합

최창효·2022년 1월 24일
0
post-thumbnail

문제 설명

  • 자신을 제외한 약수들의 합이 자신과 같은지 판별하는 문제입니다.

접근법

  • 1부터 N까지 수 중 N을 나눴을 때 그 나머지가 0이면 그 수는 N의 약수입니다.
    • 그 이유는 약수의 뜻이 나누어 나머지가 없이 떨어지는 수이기 때문입니다.
  • (a).join(list)는 list의 값 사이사이에 a를 넣어라는 뜻입니다.

정답

while True:
    num = int(input())
    if num == -1:
        break
    sum_list=[]
    sum_ = 0
    for i in range(1,num):
        if num%i ==0:
            sum_list.append(str(i))
            sum_ += i
    if sum_ == num:
        word = " + ".join(sum_list)
        print(f"{num} = {word}")
    else:
        print(f"{num} is NOT perfect.")

기타

  • N이 매우 커질 경우 1부터 N까지 전부 확인하는 건 비효율적입니다.
    • N의 제곱근까지만 가도 우리는 약수를 모두 구할 수 있습니다.
      • 그 이유는 약수는 짝이 있기 때문입니다. 2가 8의 약수란걸 알았다면 자연스럽게 8/2인 4도 8의 약수라는 걸 알 수 있습니다.
      • 제곱근까지 계산할 때 3^2 = 9처럼 정확히 제곱근인 약수도 포함해야 함을 신경써 줘야 합니다.
profile
기록하고 정리하는 걸 좋아하는 백엔드 개발자입니다.

0개의 댓글