study gomi

[백준/baekjoon] 9506번 약수들의 합 python(파이썬) 본문

Practice/Baekjoon

[백준/baekjoon] 9506번 약수들의 합 python(파이썬)

공부하곰 2024. 1. 3. 17:33
728x90
반응형

내 제출

- 집합(set)을 이용해서 약수들을 구했다.

- 결과 출력은 format을 사용

- 입력마다 약수를 구해주어야 하므로 약수를 구하는 함수 작성 -> return은 정렬된 약수 목록

# 완전수? 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같은 경우
# 약수 구하기
def get_division_sorted(target):
    set_division = {1}
    # 자신을 제외한 약수들이 필요
    # target//1의 연산 결과인 target 안 넣기 위해 2부터 loop
    for i in range(2, target // 2+1):
        if target % i == 0:
            set_division.add(i)
            set_division.add(target // i)
    return sorted(set_division)


# 입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다.
while True:
    n = int(input())
    # 입력의 마지막엔 -1이 주어진다.
    if n == -1:
        break
    # 약수 목록과 그들의 합
    division_list = get_division_sorted(n)
    division_sum = sum(division_list)
    # n이 완전수라면
    # 테스트케이스 마다 한줄에 하나씩 출력해야 한다.
    if n == division_sum:
        print(f'{n} = ', end='')
        print(*division_list, sep=' + ')
    # 완전수가 아니라면
    else:
        print(f'{n} is NOT perfect.')

특별히 어려운 점이 없어서 크게 적을 게 없다... 더 좋은 풀이가 있을 것 같다.

 

채점 결과

 

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

 

9506번: 약수들의 합

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

www.acmicpc.net

 

728x90
반응형