백준 10974번: 모든 순열 (C++)

2023. 1. 21. 02:54알고리즘/브루트포스

https://www.acmicpc.net/problem/10974

 

10974번: 모든 순열

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

풀이

골드5 문제 푸는데 구현이 되게 까다로운 문제가 순열로 너무 쉽게 풀리는 것을 보고 현타와서 순열 알고리즘을 몇개 풀었다.

 

next_permutation(v.begin(), v.end()) 을 실행하면 입력받은 배열을 바로 다음 순열로 변경한다.

do while을 쓴 이유는 next_permutation(v.begin(), v.end()) 실행 시 배열을 변경시키기 때문이다.

정렬된 배열을 한번 출력하기 위해 사용했다.

 

전체 코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N;
    vector<int> v;
    cin >> N;
    for (int i = 1; i <= N; i++) v.push_back(i);

    sort(v.begin(), v.end());

    do {
        for (int i = 0; i < N; i++) cout << v[i] << ' ';
        cout << '\n';
    } while (next_permutation(v.begin(), v.end()));
}