문제 : https://www.acmicpc.net/problem/2501
2501번: 약수 구하기
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
www.acmicpc.net
(1) 내 해답 - 1 : 카운트를 세어 가며 해결함
#include <cstdio>
int main()
{
int p = 0, q = 0;
int index = 1, result = 0;
scanf("%d %d", &p, &q);
for ( int i = 1 ; i <= p ; i++ )
{
if ( index > q ) break;
if ( p % i == 0 )
{
result = i;
index++;
}
}
printf("%d", ( index > q ) ? result : 0 );
return 0;
}
(2) 내 해답 - 2 : 배열을 선언하여 약수를 구할 때마다 배열에 넣은 후, 해당 값을 출력함
#include <cstdio>
int main()
{
int arr[10000] = {0, };
int p = 0, q = 0;
int index = 1;
scanf("%d %d", &p, &q);
for ( int i = 1 ; i <= p ; i++ )
{
if ( index > q ) break;
if ( p % i == 0 )
{
arr[index - 1] = i;
index++;
}
}
printf("%d", arr[q - 1] );
return 0;
}
(3) 다른 해답
a,b=map(int,input().split())
print(([f'{i}'for i in range(1,a+1)if a%i==0]+[0]*10000)[b-1])
a,b=map(int,input().split())
c=0
while b and c<a:
c+=1
if a%c==0:
b-=1
print(0 if b else c)
#include<stdio.h>
int main()
{
int i,n,k,cnt=0;
scanf("%d%d",&n,&k);
for(i=1;i<=n&&(k-cnt);++i) //k번째 약수를 구할 때까지 for문 동작
if(n%i==0) cnt++;
printf("%d",(cnt==k)?i-1:0);
}
#include<cstdio>
int i,n,k;
int main() {
scanf("%d %d", &n, &k);
for (i = 1; i <= n&&k; i++) k -= !(n%i); // 나머지 값이 0인 경우에만 k 값 감소
printf("%d", k ? 0 : i - 1);
return 0;
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
백준 1978번: 소수 찾기 (0) | 2024.03.22 |
---|---|
백준 9506번: 약수들의 합 (1) | 2024.03.22 |
백준 5086번: 배수와 약수 (0) | 2024.03.15 |
백준 2903번: 중앙 이동 알고리즘 (0) | 2024.02.27 |
백준 11005번: 진법 변환 2 (0) | 2024.02.27 |