주어지는 수의 모든 자리에 대해서 숫자를 2개 골라서 자리를 바꿔준다.
이때, 자리를 바꿔서 숫자가 작아지지 않도록 해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<iostream> #include<string> using namespace std; string org, tmp; int n; //n번 스왑 int Max; void dfs(int here, int cnt) { //인덱스 here과 바꿀곳 검색 if (cnt == n) { int candi = stoi(org); if (Max < candi) Max = candi; return; } for (int i = here; i < org.length(); i++) { for (int j = i + 1; j < org.length(); j++) { if (org[i] <= org[j]) { //수가 작아지지 않도록 int temp = org[i]; org[i] = org[j]; org[j] = temp; dfs(i, cnt + 1); temp = org[i]; org[i] = org[j]; org[j] = temp; } } } } int main(void) { ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; for (int tc = 1; tc <= T; tc++) { cin >> org >> n; Max = stoi(org); dfs(0, 0); cout << '#'<<tc<< ' ' << Max << '\n'; } return 0; } | cs |
'알고리즘 문제 풀이 > 삼성 SW Expert Academy' 카테고리의 다른 글
SWEA 1952: 수영장 (C++) (0) | 2019.10.04 |
---|---|
SWEA 4013번: 특이한 자석 (C++) (0) | 2019.10.03 |
SWEA 4012번: 요리사 (C++) (0) | 2019.10.03 |
SWEA 3752번: 가능한 시험 점수 (C++) (0) | 2019.09.27 |
SWEA 2814: 최장 경로 (C++) (0) | 2019.09.25 |