반응형
문제출처
https://www.swexpertacademy.com/
문제풀이
전체탐색을 통해 풀이하였습니다. base case조건으로 교환 횟수와 현재까지 바꾼 갯수가 같으면
지금까지의 결과와 현재 결과중 큰 값을 result에 저장했습니다.
소스코드
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 | #include <string> #include <algorithm> #include <iostream> using namespace std; int n, result; string num; void dfs(int cur, int cnt) { if(cnt==n) { result=max(result, stoi(num)); return; } for(int i=cur; i<num.size(); i++) { for(int j=i+1; j<num.size(); j++) { if(num[i] <= num[j]) { swap(num[i], num[j]); dfs(i, cnt + 1); swap(num[i], num[j]); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int tc; cin>>tc; for(int i=1; i<=tc; i++) { cin>>num>>n; result=0; dfs(0,0); cout<<"#"<<i<<" "<<result<<"\n"; } return 0; } | cs |
반응형
'Algorithm' 카테고리의 다른 글
[BOJ 1094] 막대기 (0) | 2019.04.15 |
---|---|
[BOJ 11718] 그대로 출력하기 (0) | 2019.04.15 |
[BOJ 3908] 서로 다른 소수의 합 (0) | 2019.02.27 |
[BOJ 2407] 조합 (0) | 2019.02.26 |
[BOJ 10974] 모든 순열 (0) | 2019.02.25 |