백준 알고리즘 - 2501번 : 약수 구하기
백준 알고리즘 - 2501번 약수 구하기 문제입니다.
(참고 - https://www.acmicpc.net/problem/2501 )
코드 )
#include <stdio.h>
int main() {
int p, q, i, k, count=0;
int arr[BUFSIZ];
scanf("%d %d", &p, &q);
for(i = 0, k = 0; i < p; i++) {
if((p % (i+1)) == 0) {
arr[k++] = i+1;
count++;
}
}
if(count < q)
printf("0\n");
else
printf("%d\n", arr[q-1]);
return 0;
}
- 약수를 구하는 하나의 방법으로, i=1부터 차례대로 증가시켜주며 , p를 i로 나눈 나머지가 0인지 (0이면, i는 p의 약수입니다.) 비교하여 만약 약수라면, 배열 arr에 그 i의 값을 저장해주고, 약수의 갯수를 체크해주는 count라는 변수를 1 더해주게 됩니다.
for문의 수행이 끝나게 되면, arr에는 약수들의 값들이 저장되어 있을 것이고, count에는 약수의 갯수만큼 저장이 되어 있을 것입니다.
이 때, 문제에서 약수의 갯수가 q보다 적어서 q번째 약수가 존재하지 않을 때에는 0을 출력하라는 조건이 있었으므로
if문을 이용하여 해당 케이스를 예외처리해줍니다.
그 외의 경우에는 배열arr에서 q번째(배열의 인덱스로는 q-1) 의 값을 출력해줍니다.
이와 같이 문제를 해결할 수 있습니다. 약수의 갯수를 어떻게 구하는지에 대한 알고리즘을 설계하는 것이 중점이라고 생각됩니다.