본문 바로가기
Study (etc)/Problem Solving

[BOJ / C++] 10974번 : 모든 순열

by Haren 2023. 3. 24.

문제

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

입력

첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다. 

출력

첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

Solved.ac 레벨

실버 III

풀이

#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> vec;
bool visited[9];
int arr[9];

void DFS(int dep){
    if(dep == n){
        for(int i = 0; i < n; i++){
            cout << arr[i] << " ";
        }
        cout << "\n";
    } else {
        for(int i = 0; i < n; i++){
            if(!visited[i]){
                visited[i] = true;
                arr[dep] = vec[i];
                DFS(dep + 1);
                visited[i] = false;
            }
        }
    }


}

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

    
    cin >> n;

    for(int i = 1; i <= n; i++){
        vec.push_back(i);
    }

    DFS(0);


    return 0;
}

 

 

10974번: 모든 순열

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

www.acmicpc.net