백준 알고리즘 - 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) 의 값을 출력해줍니다.

이와 같이 문제를 해결할 수 있습니다. 약수의 갯수를 어떻게 구하는지에 대한 알고리즘을 설계하는 것이 중점이라고 생각됩니다.


WRITTEN BY
SiriusJ

,