https://www.acmicpc.net/problem/2501
약수는 두 수의 곱으로 볼 수 있음
6의 약수 => 1, 2, 3, 6
1이 약수임을 알면 6도 약수란 걸 알 수 있음
따라서 sqrt로 주어진 수의 제곱근까지만 반복문 가능
But, 9의 약수 => 1, 3, 9
3이 중복으로 리스트에 추가되므로 처리해줘야함
import java.io.*;
import java.util.*;
public class Main {
public void solution() 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 num = Integer.parseInt(st.nextToken());
int index = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>();
for (int i=1; i<=Math.sqrt(num); i++) {
if (num%i == 0) {
list.add(i);
if (num/i != i) {
list.add(num/i);
}
}
}
if (list.size() < index) {
bw.write("0");
} else {
Collections.sort(list);
bw.write(String.valueOf(list.get(index-1)));
}
bw.flush();
br.close();
bw.close();
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
- BufferedReader, BufferedWriter, StringTokenizer
- BufferedWriter로 출력시, valueOf로 값 바꿔주기