[문제]

 

 

[내 코드]

n, k = map(int, input().split())

try:
    answer = [num+1 for num in range(n) if n%(num+1) == 0][k-1]
except:
    answer = 0
    
print(answer)

 

- 메모리 30840KB, 시간 68ms

- 정수 n이 주어질 때마다 약수 리스트를 생성해서 (k-1)번째로 인덱싱했다. 인덱싱 되지 않으면 k가 정수의 개수보다 큰 걸로 간주한다.

- 주어지는 정수 n마다 리스트를 생성해야 하기 때문에 별로 효율적이지 않은 것 같다.

- try-except 문은 최대한 쓰지 않는 게 좋을 것 같아서 for문으로 다시 작성해보기로 했다.

 

n, k = map(int, input().split())

for num in range(1, n+1):
    if n%num == 0:
        k -= 1
        if k == 0:
            print(num)
if k > 0:
    print(0)

 

- 메모리 30840KB, 시간 72ms

- 0부터 k번째를 세는 대신에 k개에서 1개씩 빼는 방법을 썼다.

- 주어진 정수 n에 대해서 for문이 종료되었을 때 k의 개수가 남아있다면 0을 출력하게 했다.

 

 

[개선안]

n, k = map(int, input().split())

for num in range(1, n+1):
    if n%num == 0:
        k -= 1
        if k == 0:
            print(num)
            break
            
if k > 0:
    print(0)

 

- k번째 약수를 출력하면 for 문을 중단한다 --> 시간이 살짝 줄어들었다(68ms)

 

N, K = map(int, input().split())

result = 0

for i in range(1, N + 1):
    if N % i == 0:
        K -= 1
        if K == 0:
            result = i
            break

print(result)

 

- 이 링크의 코드

- 처음 result를 0으로 지정하고 시작한다. k번째 약수를 result 변수에 overwrite 한다. k번째 약수가 나오지 않으면 처음에 지정했던 0이 출력된다.

복사했습니다!