알고리즘/C++

[C++] next_permutation 함수 (순열, 조합)

데메즈 2023. 1. 7. 15:41
728x90
반응형
헤더파일

#include <algorithm>

 

사용방법
next_permutation(arr, arr+n) // 배열
next_permutation(v.begin(), v.end()) // 벡터

현재 수열을 사전 순으로 생각했을때 다음 수열을 만들고 true를 반환

만약 현재 수열이 가장 마지막이어서 다음 수열에 존재하지 않는다면 false를 반환

 

순열 예시
#include <bits/stdc++.h>

using namespace std;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int a[3] = {1, 2, 3};

    do{
        for(int i=0; i<3; i++)
            cout << a[i];
        cout << '\n';
    }while(next_permutation(a, a+3));

    return 0;
}

결과

 

조합 예시

ex) 1,2,3,4 에서 수 2개를 순서없이 뽑는 모든 경우를 출력

#include <bits/stdc++.h>

using namespace std;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int a[4] = {0, 0, 1, 1};

    do{
        for(int i=0; i<4; i++){
            if(a[i] == 0)
                cout << i+1;
        }
        cout << '\n';
    }while(next_permutation(a, a+4));

    return 0;
}

결과

 

참고

https://www.youtube.com/watch?v=Enz2csssTCs&t=3s

728x90
반응형