[백준/c++] 10974번 모든 순열

mallin·2022년 1월 19일
0

백준

목록 보기
6/13
post-thumbnail

10974번 문제 링크

문제

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

입력

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

출력

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

풀이

순열에 대한 문제로 백트래킹 방식을 사용해서 풀었다.
visited 배열을 만들어두고 방문 한 경우 남은 빈 값을 채우고, 출력 후 다시 되돌려 놓는 방식으로 순열에 대한 자세한 설명 및 코드는 다음 글을 참고하면 된다 👉 [알고리즘] 순열 (Permutation)

소스코드

#include <stdio.h>
#include <iostream>

using namespace std;

int N;
int num[9];
int visited[9];

void permutation(int idx) {
    if (idx == N) {
        for(int i=0; i<N;i++) {
            cout << num[i] << " ";
        }
        cout << '\n';
        return;
    }
    
    for(int i=0;i<N;i++) {
        if (visited[i] != true) {
            visited[i] = true;
            num[idx] = i+1;
            permutation(idx+1);
            visited[i] = false;
        }
    }
    
}

int main() {
    cin >> N;
    permutation(0);
}

정답

0개의 댓글