jus981014   2년 전

N,K = map(int,input().split())
divde_list = []

for a in range(1, N+1):
    if N % a ==0:
        divde_list.append(a)

if len(divde_list) < K:
    print("0")
else:
    n1 = divde_list[K]
    print(n1)


N,K = map(int,input().split())
divde_list = []

for a in range(1, N+1):
    if N % a ==0:
        divde_list.append(a)

if len(divde_list) < K:
    print("0")
else:
    print(divde_list[K-1])

위 코드로 작성하면 문제가 맞다고 나오는데 

왜 맞는지 이해가 안되네요...

dbshin59   2년 전

이 문제는 k번째로  약수를 찾습니다.

해결책은 2가지 있는데, 하나는 약수를 큰 순서대로부터 구한 후 그 순서에 맞는 index값에 접근하는 것입니다.
두 번째(질문자님이 궁금해하시는 것)은, k 번째로 크다는 것은 n-k번째로 작다는 것을 의미합니다!

예를 들어, input이 6이라면 divde_list = [1, 2, 3, 6] 이 됩니다.

이때 1은, 4번째로 큰 수이며 1번째 작은 수입니다

이때 2는, 3번째로 큰 수이며 2번째 작은 수입니다

이때 3은, 2번째로 큰 수이며 3번째 작은 수입니다

이때 6은, 1번째로 큰 수이며 4번째 작은 수입니다

질문자님의 divde_list는 약수들을 작은 순서대로 저장하고 있습니다!

jus981014   2년 전

아 그래서 K-1 의 인덱스값이 결국 K번째로 작은 약수 값이 되는거군요

감사합니다..

댓글을 작성하려면 로그인해야 합니다.