코테/백준

[백준/JAVA] 2501번: 약수 구하기

imname1am 2023. 3. 27. 23:11
반응형

🔺 문제

 

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

 

반응형