본문 바로가기

알고리즘/BOJ

11653번

11653번 - 소인수 분해


처음에 코드가 굉장히 헷갈렸다.. 뭔가 어떻게 짜야할지 막막했다.




근데 이전에 소수인지 확인 할때 2부터 나눠서 나누어 떨어지는 지 확인하는 것처럼


소인수 분해라는 것도 결국은 약수로 계속 나눠서 소수를 만드는 것이라 생각하면 됐다.


그래서 소수를 만들기 위해서, 1과 자기 자신 말고는 나누어 떨어지는 수가 없도록 하기 위해 그 외의 나눠질 수 있는 숫자로 계속 나눈다.


그게 바로 소인수 분해가 되는 것이다. 그리고 결국은 1과 자기 자신이 남게 되는데, 1은 소인수 분해에 들어가지 않으므로


자기 자신의 숫자를 if(N>1) 에서 출력해주면 된다.


<정답 코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>

using namespace std;
 
 
int main()
{
    int N;
   
    cin >> N;
 
    for (int i = 2; i*<= N; i++)
    {
        while (N % i == 0)
        {
            printf("%d\n", i);
            N /= i;
        }
    }
 
    if (N > 1)
    {
        printf("%d\n", N);
    }
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

2004번  (0) 2017.12.08
1676번  (0) 2017.12.08
6588번  (0) 2017.12.08
1929번  (0) 2017.12.08
1978번  (0) 2017.12.08