순열 구하는 STL 함수 next_permutation(), prev_permutation()

2025. 2. 10. 11:26·내배캠/C++

 

 

📌 순열 구하는 STL 함수 next_permutation(), prev_permutation()

순열을 쉽게 구할 수 있는 next_permutation()과 prev_permutation() 함수가 있다.
이 두 함수는 주어진 데이터(벡터나 배열 등)를 정렬된 상태로부터 다음 순열 또는 이전 순열을 구하는 데 유용하다.

 

✅ next_permutation() 함수

bool next_permutation(Iterator first, Iterator last);

🔎동작 원리:

  • 현재 컨테이너가 사전순으로 가장 마지막 순열이면 false를 반환하고 처음 순열로 바꾼다.
  • 그렇지 않으면 다음 순열을 구하고 true를 반환한다.

 

✅ prev_permutation() 함수

bool prev_permutation(Iterator first, Iterator last);

🔎동작 원리:

  • 현재 컨테이너가 사전순으로 가장 작은 순열이면 false를 반환하고 마지막 순열로 바꾼다.
  • 그렇지 않으면 이전 순열을 구하고 true를 반환한다.

 


 

📍 vector의 모든 순열 구하기

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int> v = { 1,2,3 };
    do {
        for (int x : v) cout << x << " ";
        cout << endl;
    } while (next_permutation(v.begin(), v.end()));
    /*
     결과
     1 2 3
     1 3 2
     2 1 3
     2 3 1
     3 1 2
     3 2 1
    */


    vector<int> v = { 3,2,1 };
    do {
        for (int x : v) cout << x << " ";
        cout << endl;
    } while (prev_permutation(v.begin(), v.end()));
    /*
     결과
     3 2 1
     3 1 2
     2 3 1
     2 1 3
     1 3 2
     1 2 3
    */

    return 0;
}

 

 

📍 길이가 3인 순열을 모두 출력, 단 순열의 첫번째 요소는 1일 경우만

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int> v = { 1,2,3,4 };

    do {
        if (v[0] == 1)
        {
            for (int i = 0; i < 3; ++i)
            {
                cout << v[i] << " ";
            }
            cout << endl;
        }
    } while (next_permutation(v.begin(), v.end()));
    /*
      결과
      1 2 3
      1 2 4
      1 3 2
      1 3 4
      1 4 2
      1 4 3
    */

    return 0;
}

 


 

🔔 정리

🔎 언제 사용하면 좋을까?

 

  • 특정 문제에서 모든 가능한 순열을 탐색하는 경우 (예: 완전 탐색 문제).
  • 데이터를 사전순으로 정렬해서 순차적으로 처리할 때.

🟢 장점

  • 간결하고 직관적: 복잡한 순열 알고리즘을 직접 구현할 필요 없이 간단히 순열을 생성할 수 있다.
  • 효율적: 사전순으로 순열을 구하기 위해 내부적으로 효율적인 알고리즘이 구현되어 있다.

🔴 단점

  • 정렬된 상태 요구: 처음 순열을 구하기 위해 입력 데이터를 사전순으로 정렬된 상태로 두는 것이 권장된다.
  • 메모리 사용: 많은 순열을 다루거나 큰 컨테이너에 대해 순열을 구하면 메모리 사용량이 증가할 수 있다.

 

'내배캠 > C++' 카테고리의 다른 글

STL 정리  (0) 2025.02.17
N번재 값 찾기  (0) 2025.02.10
온라인 학습 관리 시스템 구현  (0) 2025.02.05
피보나치 수열  (1) 2025.02.04
stringstream  (0) 2025.01.22
'내배캠/C++' 카테고리의 다른 글
  • STL 정리
  • N번재 값 찾기
  • 온라인 학습 관리 시스템 구현
  • 피보나치 수열
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    순열 구하는 STL 함수 next_permutation(), prev_permutation()
    상단으로

    티스토리툴바