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

mainsain·2022년 3월 22일
1

백준

목록 보기
35/64

생각의 흐름

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

profile
새로운 자극을 주세요.

0개의 댓글