- sol: 재귀
- odd_num 함수를 통해 문자열로 된 숫자의 홀수의 개수를 카운트
- 한자리수: max_ans/min_ans 갱신
- 두자리수: 각 자리수를 더해 새 문자를 만들고, 이를 기반으로 recursio 수행
- 세자리수: 각 문자의 길이를 결정짓는 이중 for문을 돌려 세 문자열을 만들고, 이를 기반으로 recursion 수행
#include <bits/stdc++.h>
using namespace std;
int max_ans = -1, min_ans = INT_MAX;
string str;
int odd_num(string str){
int num = 0;
for(auto i : str) if((i - '0') % 2 != 0) ++num;
return num;
}
void recursion(string str, int cur){
if(str.size() == 1){
max_ans = max(max_ans, cur);
min_ans = min(min_ans, cur);
return;
}
else if(str.size() == 2){
string nxt = to_string((str[0] - '0') + (str[1] - '0'));
recursion(nxt, cur + odd_num(nxt));
}
else{
for(int i = 1; i < str.size()-1; ++i){
for(int j = 1; j < str.size() - i; ++j){
string str1 = str.substr(0, i);
string str2 = str.substr(i, j);
string str3 = str.substr(i+j, str.size()-i-j);
string nxt = to_string(stoi(str1) + stoi(str2) + stoi(str3));
recursion(nxt, cur + odd_num(nxt));
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> str;
recursion(str, odd_num(str));
cout << min_ans << ' ' << max_ans;
return 0;
}