[백준/JAVA] 2501번: 약수 구하기
🔺 문제
2501번: 약수 구하기
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
www.acmicpc.net
🔺 코드
import java.util.*;
import java.io.*;
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());
int cnt = 0;
int result = 0;
for(int i = 1 ; i <= n ; i++) {
if(n % i == 0) {
cnt++;
}
if(cnt == k) {
result = i;
break;
}
}
System.out.println(result);
}
}
처음에 cnt == k
조건문을 if(n % i == 0)
조건문 쪽에 넣어줬었는데 빼줬다.
그리고 List 생성하고, 리스트에 약수들을 넣어서, 약수 갯수가 k랑 같을 때의 해당 인덱스를 구하고 list.get(idx)해서 계산하려고도 했었는데
위 코드가 더 효율적이어서 이거 선택!
✅ 해결 아이디어
- result 변수 하나만 사용 (굳이 약수 리스트를 생성하고, 여기서 k번째 인덱스를 구할 필요 없음)
🔺 다른 풀이들
- 풀이1)
자바 - 구현 - 백준 2501 약수 구하기
문제 문제해결 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class B3_2501 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); List list = ne
broship.tistory.com
약수 갯수를 세지 않고 일단 리스트에 약수들을 담으심.
그리고 k번째 리스트 값을 구할 때, list.size() >= k
이면 list.get(k - 1)
로 k번째 값을 구함!!!!
- 풀이2)
[백준] 2501번 : 약수 구하기 – JAVA [자바]
https://www.acmicpc.net/problem/2501 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 문제 문제 풀이 백준 2501번 약수 구
propercoding.tistory.com
이 풀이는 n과 k 외의 다른 변수가 필요 없음.
그저 k만 이용한다!!
n % i == 0
이면 k--
를 함...!!!
그리고 k == 0
이면 (=k번째 약수가 i이면) i를 출력하게 한다....
멋지다....
(참고)
- 풀이
[백준/BOJ] 2501번 : 약수 구하기 (JAVA / 자바)
안녕하세요~ 코딩하는 코알못 코메인입니다. https://www.acmicpc.net/problem/2501 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www
comain.tistory.com