#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()));
'성우리뷰' 카테고리의 다른 글
오른쪽, 아래로 갈 수 있는 배열에서 최대 점수 획득 (0) | 2021.10.30 |
---|---|
C++ 중첩 및 조합 이용, 덱에 숫자 넣어 최소한의 합 만들기 (1) | 2021.10.28 |
구조체 우선순위큐 넣고 정렬 & vector pair의 정렬 (0) | 2021.10.27 |
엘리베이터 숫자 표지판 사칙연산 (0) | 2021.10.24 |
14500 중첩이용 풀이 (5) | 2021.10.19 |