10974번 - 모든 순열
모든 순열을 구하는 문제인데, 사전식으로 출력하라고 했으니,
next_permutation 을 쓰면 된다. ( 10972번)
단 시간 초과 문제로 cin,cout 대신 printf 를 사용해야한다.
<정답 코드>
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include<iostream> #include<vector> using namespace std; bool next(vector<int> &v) { int inc = -1; int dec = -1; for (int i = 0; i < v.size()-1; i++) { if (v[i] < v[i + 1]) { inc = i; } } if (inc == -1) { return false; } for (int i = inc + 1; i < v.size(); i++) { if (v[inc] < v[i]) { dec = i; } } swap(v[inc], v[dec]); int last = v.size() - 1; while (inc + 1 < last) { swap(v[inc + 1], v[last]); inc++; last--; } return true; } int main() { int N; vector<int> v; cin >> N; v.resize(N); for (int i = 0; i < N; i++) { v[i] = i + 1; } while (true) { for (int i = 0; i < N; i++) { printf("%d ", v[i]); } printf("\n"); if(!next(v)) { break; } } return 0; } | cs |
반응형