알고리즘

[PYTHON/파이썬] 백준 BAEKJOON 2501번 약수 구하기

remazitensi 2024. 8. 12. 00:38

문제 링크

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

 

 

 

문제풀이


이 문제는 주어진 자연수 ( N )의 약수를 모두 구한 다음, 그 중에서 ( K )번째로 작은 약수를 찾는 것입니다.

먼저, 1부터 ( N )까지의 숫자 중에서 ( N )을 나누어 떨어지게 하는 숫자들, 즉 약수를 찾아냅니다. 이렇게 찾은 약수들은 자연스럽게 오름차순으로 정렬됩니다.

그 다음, 약수의 개수를 확인하여 ( K )번째 약수가 존재하는지 판단합니다. 만약 약수의 개수가 ( K )보다 적으면 0을 출력하고, 그렇지 않으면 ( K )번째 약수를 출력합니다.

 

코드

# 입력 받기
N, K = map(int, input().split())

# N의 약수를 저장할 리스트
divisors = []

# 1부터 N까지 반복하여 약수 찾기
for i in range(1, N + 1):
    if N % i == 0:  # 만약 i가 N의 약수이면
        divisors.append(i)

# K번째 약수를 찾기
if K <= len(divisors):  # K가 약수의 개수보다 작거나 같은 경우
    print(divisors[K - 1])  # K번째 약수 출력 (인덱스는 K-1)
else:
    print(0)  # K번째 약수가 존재하지 않으면 0 출력