[c++] 순열

jw·2022년 9월 7일
0

📘 코테 준비 📘

목록 보기
31/37

next_permutation과 prev_permutation을 이용

next_permutation
오름차순의 배열을 기반으로 순열을 만들 수 있다.
prev_permutation
내림차순의 배열을 기반으로 순열을 만들 수 있다.

매개변수로는 순열을 만들 범위를 가리키는 [first,last)
순열을 시작할 범위의 첫번째 주소, 그리고 포함되지 않는 마지막 주소

int a[3] = {1, 2, 3};
void print(vector<int> &v)
{
    for (int i = 0; i < v.size(); i++)cout << v[i] << " ";
    cout << "\n";
}

int main()
{
    vector<int> v;

    for (int i = 0; i < 3; i++)v.push_back(a[i]); // 1 2 3
    do
    {
        print(v);

    } while (next_permutation(v.begin(), v.end()));

    cout << "----------"<< "\n";

    v.clear();
    for (int i = 2; i >= 0; i--)v.push_back(a[i]); // 3 2 1
    do
    {
        print(v);

    } while (prev_permutation(v.begin(), v.end()));
}

next_permutation을 쓰려면 요소가 오름차순 정렬되어있어야하고
prev_permutation을 쓰려면 요소가 내림차순 정렬되어있어야 한다.

그리고 permutation 함수의 두 번째 매개변수는 포함되지않는 마지막 주소이기 때문에 v.end()가 들어갈 수 있다.

(end()는 해당 리스트의 마지막 요소보다 한칸 뒤의 주소값을 가리킨다.)

profile
다시태어나고싶어요

0개의 댓글