백준 2231번: 분해합 (C++)
2023. 1. 16. 17:26ㆍ알고리즘/브루트포스
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
풀이
숫자가 주어졌을때 숫자 -> 분해합은 쉽지만 그 반대는 생성자가 여러개이기 때문에 완전 탐색을 통해 찾아야겠다고 생각했다.
우선, n을 인수로 받아 n-1까지 탐색하는 Generator 함수를 만들었다.
생성자는 n보다는 항상 작기 때문에 1부터 n-1번까지 탐색을 진행시켰다.
문자열로 변환해서 각 자리수를 더해가며 생성자를 찾는 알고리즘을 구성했는데
성공은 했지만, 다른 블로그를 찾아보니 tmp /= 10을 진행하며 구현한 방법이 더 쉬워보여서 살짝 아쉬웠다.
전체 코드
#include <iostream>
#include <string>
using namespace std;
int N;
string s;
int Generator(int n) {
int tmp;
for (int i = 1; i < n; i++) {
tmp = i;
s = to_string(i);
for (int j = 0; j < s.size(); j++) tmp += s[j] - '0';
if (tmp == n) return i;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
cout << Generator(N);
}
'알고리즘 > 브루트포스' 카테고리의 다른 글
백준 2309번: 일곱 난쟁이 (C++) (0) | 2023.01.21 |
---|---|
백준 10974번: 모든 순열 (C++) (1) | 2023.01.21 |
백준 2890번: 카약 (C++) (0) | 2023.01.19 |
백준 1057번: 토너먼트 (C++) (0) | 2023.01.17 |
백준 1051번: 숫자 정사각형 (C++) (0) | 2023.01.17 |