# SW Expert Academy 13428 숫자조작
풀이 방법 및 배워야할 것:
- 모든 조합을 다 찾아 최솟값과 최댓값을 찾음
- 조합을 구하는데 DFS 방법을 썼는데 좀 더 간단히 할 수 있는 방법이 있을 것 같다.
- 풀이 코드 :
#include<iostream>
#include<string>
#include<vector>
#define MAX 9
using namespace std;
int n;
int m=2;
int a[MAX] = {0,};
bool c[MAX] = {0,};
vector <pair <int, int>> v;
void dfs(int num, int cnt)
{
if(cnt == m) //Only m ==2
{
v.push_back(make_pair(a[0],a[1]));
return;
}
for(int i = num; i <= n; i++)
{
if(!c[i])
{
c[i] = true;
a[cnt] = i;
dfs(i+1, cnt+1);
c[i] = false;
}
}
}
int main(int argc, char** argv)
{
int test_case;
int T;
//freopen("sample_input.txt", "r", stdin);
cin>>T;
for(test_case = 1; test_case <= T; ++test_case)
{
int tmp;
cin >>tmp;
string word1=to_string(tmp);
n=word1.size();
v.clear();
dfs(1,0);
int min=tmp;
int max=tmp;
//int number;
// 모든 조합 다 계산
for (int i=0; i<v.size();i++){
string word2=to_string(tmp);
char ch1=word2[v[i].first-1];
char ch2=word2[v[i].second-1];
if (v[i].first-1==0 && ch2=='0') continue;
else {
word2[v[i].first-1]=ch2;
word2[v[i].second-1]=ch1;
int number=stoi(word2);
//cout << v[i].first << " " << v[i].second << " " << number << "\n";
if (number < min){
min=number;
}
if (number > max){
max=number;
}
}
}
cout << "#" << test_case << " "<< min << " " << max << "\n";
}
return 0;
}