소수의 배를 제거하면서 k번째를 찾으면 된다.
dp 리스트로 중복방지를 하며, K번째를 찾을 수 있게 카운트해 줬다.
예를 들어, 6은 2의 3의 공통배수이다. 따라서 중복제거를 피해야 한다.
import sys, math
input = sys.stdin.readline
n, k = map(int, input().split())
sosu = []
for num in range(2, n + 1):
check = True
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
check = False
break
if check:
sosu.append(num)
def main():
cnt = 0
dp = [0] * (n + 1)
for num in sosu:
for i in range(1, (n // num) + 1):
cal = num * i
# print(cal, num, i)
if dp[cal] == 0:
dp[cal] = 1
cnt += 1
if cnt == k:
return cal
print(main())
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] [Python] 15686번 : 치킨 배달 (0) | 2021.08.27 |
---|---|
[BOJ] [Python] 14502번 : 연구소 (0) | 2021.08.26 |
[BOJ] [Python] 1935번 : 후위 표기식2 (1) | 2021.07.31 |
[BOJ] [Python] 1158번 : 요세푸스 문제 (1) | 2021.07.31 |
[BOJ] [Python] 7568번 : 덩치 (1) | 2021.07.27 |