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

2020. 9. 16. 20:18알고리즘 문제풀이

www.acmicpc.net/problem/2501

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net

n을 1부터 sqrt(n)까지 나눴을 때 나머지가 0인지 확인해서 약수를 구한다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	vector<int> result; //약수를 저장할 벡터
	int n, k;

	cin >> n >> k;

	//n을 1부터 sqrt(n)까지 나눴을때 나머지를 확인해서 약수인지 아닌지 판단한다
	for (int i = 1; i <= sqrt(n); i++)
	{
		//약수일때
		if (n%i == 0) 
		{
			result.push_back(i);

			//같은 약수가 중복으로 result에 들어가는것 방지
			if (i != n / i)
				result.push_back(n / i);
		}
	}

	//오름차순으로 정렬
	sort(result.begin(), result.end());

	//약수의 개수가 k보다 작을때
	if (result.size() < k)
		cout << 0;

	else
		cout << result[k - 1];

	return 0;
}