문제
백준 2231번
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
코드
#include<iostream>
using namespace std;
int n;
int main() {
cin >> n;
for (int i = 1; i < n; i++) {
int sum = i;
int tmp = i;
while (tmp > 0) {
sum += tmp % 10;
tmp /= 10;
}
if (n == sum) {
cout << i;
return 0;
}
}
cout << 0;
}
풀이방법
1부터 시작해서 n까지 숫자를 증가시켜가며 분해합을 구한다. 분해합이 주어진 n과 같아지면 해당 생성자를 출력하고, 생성자가 존재하지 않으면 0을 출력한다.
고민과정
i값을 어디까지 증가시켜야하나 잠시 고민했다. 생성자가 분해합보다 커질 수는 없기 때문에 n까지 증가시켰다.
'algorithm > Bruteforce & Backtracking' 카테고리의 다른 글
[C++] BOJ 2798 JACK 블랙잭 (0) | 2021.04.03 |
---|---|
[C++] BOJ 2309 일곱 난쟁이 (0) | 2021.04.03 |
[C++] BOJ 18111 마인크래프트 (0) | 2021.04.03 |
[C++] BOJ 1120 문자열 (0) | 2021.04.03 |