코딩테스트/백준

[백준 JAVA] 2501 - 약수 구하기

kittae 2024. 12. 3. 15:11

 

해당 문제도 쉬운 문제였다!

 

해당 문제는 시간 복잡도와 메모리 제한은 10,000개 이하이기 때문에 신경 안 써도 된다고 판단했다!

 

내가 생각한 로직이다.

for (i = 0; i < n; i++)
n * k == 0 -> 배열에 i값 적재
출력값에 arr[k-1]값 출력

 

여기서 생각한건, 기본적인 arr를 사용한다면 k번째의 값을 구하는 로직이 복잡해지기 때문에 ArrayList로 구현했다!

[최종코드]

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        ArrayList<Integer> arr = new ArrayList<>();

        for (int i = 1; i <= n; i++) {

            if (n % i == 0 || i == 1)
                arr.add(i);
        }

        if (k > arr.size())
            System.out.println("0");

        else
            System.out.println(arr.get(k-1));
    }
}

 

배운점

해당 문제는 ArrayList로 배열을 구현했는데 매우 좋은 로직인 것 같다! c++로 쳤을 때 vector느낌이었다!

해당 문법을 사용할 수 있는 좋은 기회가 된 거 같다!