[문제]
[내 코드]
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이 출력된다.
'컴퓨터 > 코딩테스트' 카테고리의 다른 글
[백준/튼튼한기본기] 10870번: 피보나치수 5 (0) | 2022.09.11 |
---|---|
[백준/튼튼한기본기] 2460번: 지능형 기차 2 (1) | 2022.09.11 |
[백준/튼튼한기본기] 10818번: 최소, 최대 (0) | 2022.09.10 |
[백준/튼튼한기본기] 3460번: 이진수구하기 (0) | 2022.09.10 |
[백준] 입력/input값 받기 (0) | 2022.09.09 |