[백준] 2501

ninano05·2026년 3월 27일

약수 구하기
약수를 구할 때는 제곱근의 반복문을 생각한다.
제곱근은 i*i <N 혹은 Math.sqrt()(double타입임) 2가지 방식으로 구할 수 있다.
반복문으로 나머지가 0인 경우로 절반의 약수를 구하고, 이를 바탕으로 나머지 절반을 구한다.

list로 줄세워서 구하기

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        ArrayList<Integer> list = new ArrayList<>();

        for(int i=1; i * i <N; i++) {
            if(N%i==0) {
                list.add(i);
                if(i*i != N) { // 완전 제곱수 중복 방지
                    list.add(N/i);
                }
            }
        }
        Collections.sort(list); // 정렬하기
        if(list.size() < K) {
            bw.write("0");
        } else {
            bw.write(list.get(K-1)+"");
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

바로 출력해서 구하기(전체 반복)

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        int count = 0;

        for(int i=1; i<=N; i++) {
            if(N%i==0) {
                count ++;
                if(count == K) bw.write(i+"");
            }
        }
        if(count < K) bw.write("0");
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글