문제 링크
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 출력
'알고리즘' 카테고리의 다른 글
[JAVA/자바] 백준 BAEKJOON 3048번 개미 (0) | 2024.08.18 |
---|---|
[PYTHON/파이썬] 백준 BAEKJOON 2460번 지능형 기차 2 (0) | 2024.08.16 |
[JAVA/자바] 백준 BAEKJOON 10798번 세로읽기 (0) | 2024.08.15 |
[PYTHON/파이썬] 백준 BAEKJOON 10818번 최소, 최대 (0) | 2024.08.14 |
[JAVA/자바] 백준 BAEKJOON 3460번 이진수 (0) | 2024.08.13 |