본문 바로가기
개발/백준 & 프로그래머스

[백준]2501번 약수구하기 c/c++

by 성장하고픈개발자 2022. 6. 25.
728x90
728x90

문제

https://www.acmicpc.net/problem/2501

나의 문제해결 순서

1. n(자연수)와 k(n의 약수중 k번째로 작은수)를 입력받는다.
2. 약수 개수를 세어줄 정수형 변수 cnt를 0으로 초기화 해준다.
3. 약수를 a배열에 차례대로 저장하기위해 크기가 10000인 정수형 배열을 선언해준다.
(n이 1이상 10000이하이기 때문에 약수의 개수가 최대 10000개가 될 수 있기때문)
4. a배열의 인덱스값을 나타내줄 j를 0으로 초기화해준다.
5. 입력해준 n을 1부터 n까지 for문을 돌린다.
6. (for문을 돌면서 1~n까지 증가하는)i로 나누었을때 0이되면 i가 n의 약수가 되기 때문에 약수를 구하게 되면
7. a배열에 약수를 저장해준다.
8. cnt와 j를 증가시켜준다.
9. N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력해야하기때문에 cnt가 k보다 크거나 같을때는 a배열의 k-1번째번째 값을 출력해주고, 그 경우가 아니라면 0을 출력해준다.


코드

#include<iostream>
using namespace std;

int main()
{
    int n, k;
    cin >> n >> k;
    int cnt = 0;
    int a[10000];
    int j = 0;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
            a[j] = i;
            j++;
            cnt++;
        }
    }
    if (cnt >= k)
        cout << a[k - 1];
    else
        cout << 0;
    return 0;
}
728x90
728x90