[C언어] 백준 11653 : 소인수분해
생각의 흐름
-
72를 두고 생각해보자. 일단 2로 나누고, 안될때까지 2로 나눈다 계속. 안되면 1증가, 안되면 1증가...
-
반복문을 사용해보자. 근데 2로 나눈것까지는 좋은데 다시 2로 나누어야 한다. 고민을 좀 해봤는데 재귀를 사용하기로 했다.
-
72를 2로 나누고, 72 / 2값을 다시 올린다. 또 반복문이 새로 돌아가는데 다시 2로 나누어진다.. 결국 9가 되고, if에 안걸린채로 i가 1 증가해서 3으로 나누어진다.
-
출력을 하면서 진행했고, 재귀가 끝나면 바로 리턴으로 종료시켰다. 다른사람들은 어떻게 풀었는지 궁금하다.
내가 푼 코드
#include <stdio.h>
int res(int n)
{
int i;
i = 2;
while (n > 1)
{
if (n % i == 0)
{
printf("%d\n", i);
res(n / i);
return 0;
}
i++;
}
}
int main()
{
int n;
scanf("%d", &n);
res(n);
}
다른 사람 코드
#include <stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
for (i = 2; i <= n; i++)
{
while (n % i == 0)
{
printf("%d\n", i);
n = n / i;
}
}
}
반복문들 두개 돌린다. while문에서 조건을 저렇게 설정해놓으니 n % i가 계속돌아간다..
i++를 생각없이 사용했었는데, 저 코드처럼 굳이 ++안하고 if문마냥 사용하는걸 기억하자.
Author And Source
이 문제에 관하여([C언어] 백준 11653 : 소인수분해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmainsain/C언어-백준-11653-소인수분해저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)