본문 바로가기

알고리즘/백준

[백준] 2501 - 약수 구하기 (JAVA/ 자바)

반응형

2501번 문제(1)
2501번 문제(2)

1.Scanner를 이용한 방법

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
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();
    List<Integer> num = new ArrayList<Integer>();

    for(int i=1; i<=N; i++){
        if(N % i == 0){
            num.add(i);
        }
    }
    num.sort(Comparator.naturalOrder());
    if(num.size() < K){
        System.out.println(0);
    }
    else{
        System.out.println(num.get(K-1));
    }
    sc.close();
    }
}

 

2. BufferedReader를 이용한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;

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());
    List<Integer> num = new ArrayList<Integer>();

    for(int i=1; i<=N; i++){
        if(N % i == 0){
            num.add(i);
        }
    }
    num.sort(Comparator.naturalOrder());
    if(num.size() < K){
        System.out.println(0);
    }
    else{
        System.out.println(num.get(K-1));
    }
    br.close();
    }
}

처음에 배열을 이용해서 하려고 했는데 자꾸 ArrayIndexOutOfBoundsException 이 나서 List로 바꾸어서 약수 값을 넣고 sort로 오름차순 정렬을 해준 뒤, 구하는 방식을 이용했다.

sort는 굳이 쓰지 않아도 되는 것 같긴 한데 혹시나 하는 마음에 넣었다.

반응형