Algorithm
[C++] next_permutation
rudgh99_algo
2024. 8. 17. 18:12
꿀팁을 배웠다. 순열과 조합을 사용할 때, C++에서는 next_permutation을 사용하면 된다고 한다.
1. 순열을 이용 (예시) 1,2,3 원소 3개를 순서대로 나열하는 법
#include <bits/stdc++.h>
using namespace std;
int main(void) {
int arr[5] = { 1,2,3 };
do {
for (int i = 0; i < 3; i++) {
cout << arr[i];
}
cout << '\n';
} while (next_permutation(arr, arr + 3));
}
do while문과 next_permutation을 이용해서 순열을 표현한다. 배열이 오름차순 정렬되어있어야 한다.
2. 조합 (5개의 원소 중에 3개를 뽑는 방법)
#include <bits/stdc++.h>
using namespace std;
int main(void) {
int arr[5] = { 0,0,0,1,1 };
do {
for (int i = 0; i < 5; i++) {
if (arr[i] == 0)
cout << i + 1;
}
cout << '\n';
} while (next_permutation(arr, arr + 5));
}
0의 개수는 뽑고자 하는 수, 1의 수는 뽑지 않는 수이다. 그렇게 기억하면 쉽다. 이것도 순열과 마찬가지로 오름차순 정렬 되어있어야 한다. i에 1을 더하면 , 1,2,3,4,5에서 뽑고자 하는 말이다. 만약 i에 n을 더한다면, [1+n,5+n]에서 뽑는다는 이야기가 된다.
Backtracking을 할 때 유용하다고 한다. 하지만 아직 써보지는 않았다.