잡다한 지식
next_permutaion 함수
컴영
2020. 3. 18. 20:10
이전 포스팅에서 순열을 재귀적 방법을 통해 구현해보는 걸 올린적이 있는데.
순열을 c++ <algorithm> 헤더에서 next_permutation이라는 함수를 통해 쉽게 구현하는 방식이 있어서 정리해보자 한다.
<algorithm> 헤더를 추가한 후,
next_permutation()함수에 백터의 iterator 혹은 주소를 넣으면 벡터에 다음 순열이 적용된다.
bool next_permutation(수열의 시작, 수열의 끝)
: 현재 나와 있는 수열에서 다음 순열을 구하고 true를 반환.
다음 순열이 없다면(다음에 나온 순열이 순서상 이전 순열보다 작다면) false를 반환.
코드를 통해서 자세히 알아보자. ([1,2,3,4,5] 수열에서 나올 수 있는 순열은?)
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 | #include <stdio.h> #include <vector> #include <algorithm> using namespace std; vector <int> vec; int main() { // 1부터 5까지 벡터에 저장 for (int i = 1; i <= 5; i++) { vec.push_back(i); } // next_permutation을 통해서 다음 순열 구하기 do { for (int i = 0; i < 5; i++) { printf("%d ", vec[i]); } printf("\n"); } while (next_permutation(vec.begin(), vec.end())); return 0; } | cs |
이런 식으로 결과값이 잘 나옴을 볼수있다. 결과값이 길어서 중간에 잘랐다.