백준 알고리즘 - 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) 의 값을 출력해줍니다.
이와 같이 문제를 해결할 수 있습니다. 약수의 갯수를 어떻게 구하는지에 대한 알고리즘을 설계하는 것이 중점이라고 생각됩니다.
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 2525번 : 오븐 시계 (0) | 2016.05.14 |
---|---|
백준 알고리즘 - 2506번 : 점수계산 (0) | 2016.05.14 |
백준 알고리즘 - 2441번 : 별 찍기 -4 (0) | 2016.04.19 |
백준 알고리즘 - 1789번 : 수들의 합 (0) | 2016.04.19 |
백준 알고리즘 - 1731번 : 추론 (0) | 2016.04.19 |
WRITTEN BY