✔ 문제 2501 약수 구하기
2501번: 약수 구하기
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
www.acmicpc.net
PYTHON
n, k = map(int, input().split())
div = []
for i in range(1, int(n**(1/2)) + 1):
if n % i == 0:
div.append(i)
if i != n // i: # 중복을 피하기 위함
div.append(n // i)
sorted_div = sorted(div)
if k <= len(sorted_div):
print(sorted_div[k-1])
else:
print(0)
JAVA
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] divisors = getDivisors(n);
Arrays.sort(divisors); // 약수 오름차순 정렬
if(k <= divisors.length){
System.out.println(divisors[k-1]);
}else{
System.out.println(0);
}
}
private static int[] getDivisors(int n){
int[] divisors = new int[2 * (int) Math.sqrt(n)]; // 최대 약수 개수는 2 * sqrt(n) 이므로 배열 크기 설정
int idx = 0;
for (int i = 1; i <= Math.sqrt(n); i++){
if (n % i == 0){
divisors[idx++]=i;
if(i != n / i){
divisors[idx++] = n / i;
}
}
}
// 배열 크기에 맞게 잘라서 반환
int[] res = new int[idx];
System.arraycopy(divisors, 0, res, 0, idx);
return res;
}
}
'자료구조&알고리즘 > 백준' 카테고리의 다른 글
[백준] 색종이 10163번 (PYTHON,JAVA) (2) | 2024.03.26 |
---|---|
[백준] N과 M(1) 15649번 (PYTHON,JAVA) (0) | 2024.03.15 |
[백준] 색종이-2 2567번 (PYTHON,JAVA) (0) | 2024.03.07 |
[백준] 색종이 2563번 (PYTHON,JAVA) (0) | 2024.03.07 |
[백준] 블랙잭 2798번 (PYTHON) (0) | 2024.03.07 |