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 |