반응형

 

● 문제 접근 과정

1. 두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.

2. 첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.

3. N의 약수들을 구하기 위해 N번만큼 반복하고, 딱 나누어 떨어질 경우 배열에 저장.

4. cnt와 j도 같이 증가.

5. cnt보다 k값이 더 작거나 같다면, 해당 인덱스를 출력.

6. 아니라면 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;
}

 

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

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net

 

반응형

+ Recent posts