본문 바로가기

Computer Science&Engineering/코딩테스트

[백준 10974] 모든 순열

# 문제 링크

www.acmicpc.net/problem/10974

 

10974번: 모든 순열

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

www.acmicpc.net

 

 

처음에는 순열 출력 구현에 애를 먹었지만, 코드를 보고나서 충격을 받아 외워버렸습니다. 1부터 N까지 DFS를 호출하는데, 출력시에 숫자를 중복해서 넣지 않도록 check 배열을 만들어서 확인해줍니다. 이후 출력을 한 뒤에는 다시 해당 숫자를 쓸 수 있도록 check를 초기화해줍니다.

 

# 제출 코드 

 

# include <iostream>
using namespace std;

int N;
bool check[10];
int num[10];

void DFS(int node){
	if (node >= N) {
		for(int i = 0; i < N; i++){
			cout << num[i] << ' ';
		}
		cout << '\n';
		return;
	}
	for(int i = 1; i<=N; i++){
		if(check[i] == true) continue;
		check[i] = true;
		num[node] = i;
		DFS(node + 1);	
		check[i] = false;
	}
}

int main() {	
	cin >> N;
	DFS(0);
	return 0;
}

 

 

반응형