관리 메뉴

cococo-coding

[C++ 풀이] 2501번. 약수 구하기 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 2501번. 약수 구하기

_dani 2024. 1. 21. 04:25

풀이

약수가 몇 번째인지 셀 카운트변수와 벡터를 생성해서 풀어준다.

입력받는 변수 n, k와 헷갈리지 않도록 주의하자

 

약수를 넣을 벡터를 생성해준다.

vector <int> v(n);

이때 벡터의 크기 n을 설정해주지 않은 상태로 인덱스로 벡터에 접근하게 되면

vector subscript out of range라는 오류가 발생한다.

 

for문을 이용해 1부터 n까지 n을 나누면서 약수를 구한다.

0으로 나눠떨어지는 경우가 약수이므로, cnt변수를 증가시키고 v[cnt]에 i를 넣어준다.

 

그리고 cnt < k인 경우는 0을 출력, 이외에는 정상적인 케이스이므로 v[k]를 출력해준다.

 

코드

#include <iostream>
#include <vector>
using namespace std;
/*
1. n과 k를 입력받는다.
2. n의 약수들을 구한다.
3. n의 약수들 중 k번째로 작은 수를 구한다.
4. 3을 출력한다.
*/

int main() {
    //1
    int n, k;
    cin >> n >> k;

    //2
    int cnt = 0;
    vector <int> v(n); //약수 넣을 벡터
    //이 때 벡터의크기 (n)을 써주지않고 아래처럼 인덱스로 접근을 하게 되면 vector subscript out of range에러 발생..

    for (int i = 1; i <= n; i++) {
        //n의 약수들 구하기
        if (n % i == 0) {
            cnt++;
            v[cnt] = i;
            //cout << v[cnt] << ": "<< i <<'\n';
        }
    }
        if (cnt < k) {
            cout << '0' << '\n';
        }
        else {
            cout << v[k] << '\n';
        }
    
    return 0;
}