Algorithm/Brute-force

[C++] 백준 2231번 : 분해합 (B2)

supremo7 2020. 7. 15. 15:27

#문제

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+

www.acmicpc.net

#풀이

특별한 방법을 생각해 내려고 노력하기보다는 1부터 모든 수를 살펴보면 되겠다는 생각을 하는 것이 중요하다.

시간복잡도를 살펴보고 이러한 방법이 가능하다면 지체 없이 이 방법으로 시도해보자.

그리고 여기서 중요한 것은 숫자의 각 자리 수에 접근하는 방법이다. 아래 소스코드 13번째 줄의 for문과 같은 방법의 사용에 익숙해져야 한다.(10으로 나눈 나머지를 구하고, 10으로 나눠 다음 자리를 살펴본다)

#소스코드

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
28
29
30
31
32
33
#include<iostream>
using namespace std;
 
 
int main(void
{
    int N;
    cin >> N;
    
    int i = 0;
    int res = 0;
 
    for (i = 0; i < N; i++) {
        res = i;
        int div = res;
        while (div != 0) {
            res += div % 10;
            div /= 10;
        }
 
        if (res == N) {
            cout << i;
            break;
        }
 
    }
 
    if (i == N ) {
        cout << 0;
    }
 
    return 0;
}
cs