성우리뷰
C++ prev_permutation 통한 모든 조합 넣기
두원공대88학번뚜뚜
2021. 10. 27. 20:18
#include <string>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <limits>
#include <limits>
#include <iterator>
using namespace std;
vector<int> permutation(string& str) {
sort(str.begin(), str.end(), std::greater<>());
vector<string> tmp;
vector<int> tmpint;
do {
if(stoi(str) >= pow(10, str.size()-1))
tmpint.push_back(stoi(str));
} while (prev_permutation(str.begin(), str.end()));
return tmpint;
}
vector<int> solve(long s1, long s2) {
string str1 = to_string(s1);
string str2 = to_string(s2);
string ready1 = ""; string ready2 = "";
for (int i = 0; i < str1.size(); i+=2) {
for (int j = 0; j < str1[i + 1] - '0'; j++) {
ready1 += str1[i];
}
}
for (int i = 0; i < str2.size(); i+=2) {
for (int j = 0; j < str2[i + 1] - '0'; j++) {
ready2 += str2[i];
}
}
string len = "len";
vector<int> permut1 = permutation(ready1);
vector<int> permut2 = permutation(ready2);
int min = 2100000000; int max=2100000000;
int tmpmin; int tmpmax;
for (auto a: permut1) {
for (auto b : permut2) {
if (abs(a - b) == 1) {
tmpmin = a > b ? b : a;
tmpmax = a > b ? a : b;
if (min > tmpmin) {
min = tmpmin;
max = tmpmax;
}
}
}
}
cout << min << " " << max << endl;
vector<int> ans;
return ans;
}
int main(void){
vector<int> ans = solve(1103, 1202);
ans = solve(21, 31);
solve(92817101, 81711102);
return 0;
}
주목할 부분은
do {
if(stoi(str) >= pow(10, str.size()-1))
tmpint.push_back(stoi(str));
} while (prev_permutation(str.begin(), str.end()));