공부하기/백준

[Java] 백준 풀기 2501 - 약수 구하기

XEV 2023. 6. 1. 23:45

자바 백준 2501번

브론즈 3

https://www.acmicpc.net/problem/2501

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 브루트포스 알고리즘

 

 

 

 

 

문제 풀기

주어진 N 을 1 부터 N 까지 나누었을때 나머지가 0 인 숫자를 ArrayList 로 저장한다.

지정한 K 보다 ArrayList 에 저장된 숫자가 작거나 없을 경우를 제외하고, K 번째 숫자인 index K-1 을 ArrayList 에서 찾아 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class Main {
    
    public static void main (String args[]) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int K = sc.nextInt();

        int kthDivisor = findKthDivisor(N, K);

        if (kthDivisor != -1) {
            System.out.print(kthDivisor);  // K 번째 약수 출력.
        } else {
            System.out.print(0);  // K 번째 약수가 없을때.
        }
    }

    public static int findKthDivisor (int N, int K) {
        List<Integer> divisors = new ArrayList<>();

        for (int i = 1; i <= N; i++) {
            if (N % i == 0) {
                divisors.add(i);  // 나눈 나머지가 0 일때 리스트에 추가.
            }
        }

        if (K > divisors.size()) {
            return -1;  // 약수가 존재하지 않거나 K 번째로 작은 수를 찾을 수 없음.
        }

        return divisors.get(K - 1);
    }
    
}