잡다한 지식

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

이런 식으로 결과값이 잘 나옴을 볼수있다. 결과값이 길어서 중간에 잘랐다.