[C언어] 백준 11653 : 소인수분해

5554 단어 C백준C

생각의 흐름

  1. 72를 두고 생각해보자. 일단 2로 나누고, 안될때까지 2로 나눈다 계속. 안되면 1증가, 안되면 1증가...

  2. 반복문을 사용해보자. 근데 2로 나눈것까지는 좋은데 다시 2로 나누어야 한다. 고민을 좀 해봤는데 재귀를 사용하기로 했다.

  3. 72를 2로 나누고, 72 / 2값을 다시 올린다. 또 반복문이 새로 돌아가는데 다시 2로 나누어진다.. 결국 9가 되고, if에 안걸린채로 i가 1 증가해서 3으로 나누어진다.

  4. 출력을 하면서 진행했고, 재귀가 끝나면 바로 리턴으로 종료시켰다. 다른사람들은 어떻게 풀었는지 궁금하다.

내가 푼 코드

#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문마냥 사용하는걸 기억하자.

좋은 웹페이지 즐겨찾기