궤도

[백준] 10974번 : 모든 순열 본문

💻 현생/⛓ 알고리즘

[백준] 10974번 : 모든 순열

영이오 2021. 4. 14. 19:24

문제

 


풀이

 

myunji.tistory.com/73

 

[백준] 15649번 : N과 M (1)

문제 풀이 백트래킹의 기본 문제이다. 백트래킹은 해당 value의 방문 여부를 따지며 주로 재귀함수로 구현하는 경우가 많다. 그렇기 때문에 전역 변수 쓸 일이 좀 많다. 백트래킹 문제를 그림으로

myunji.tistory.com

이때 백트래킹으로 풀었던 문제였는데...

 

www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_permutation

 

next_permutation - C++ Reference

function template std::next_permutation default (1)template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); custom (2)template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Comp

www.cplusplus.com

이걸로 간단하게 풀 수 있었다.

 

(1, 2, 3, ..., N)부터 시작해서 next_permutation을 계속 호출하면 된다.

가장 첫번째 순열을 빠뜨리지 않도록 do-while문을 사용했다.


소스코드

 

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int N;
    vector<int> arr;

    cin >> N;
    for (int i = 1; i <= N; i++) {
        arr.push_back(i);
    }

    do { //순서대로 출력
       for (int i = 0; i < N; i++)
            cout << arr[i] << ' ';
        cout << '\n';
    } while (next_permutation(arr.begin(), arr.end()));
}
Comments