본문 바로가기

Algorithm/BAEKJOON

[BOJ] 10974번 모든 순열 (C++)

728x90
반응형

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

 

10974번: 모든 순열

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

www.acmicpc.net

 

sol 1) next_permutation을 이용

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

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	int n;
	cin >> n;
	vector<int> v;
	for(int i = 0; i < n; i++){
		v.push_back(i + 1);
	}
	
	do{
		for(int i = 0; i < n; i++){
			cout << v[i] << " ";
		}
		cout << '\n';
	} while(next_permutation(v.begin(), v.end()));
	return 0;
}

 

sol2) 백트래킹을 이용 (15649번과 비슷)

#include <iostream>
using namespace std;

int n;
int arr[9];
bool isused[9];

void func(int k) {
	if(k == n + 1) {
		for(int i = 1; i <= n; i++)
			cout << arr[i] << " ";
		cout << "\n";
	}
	else {
		for(int i = 1; i <= n; i++){
			if(!isused[i]) {
				isused[i] = true;
				arr[k] = i;
				func(k + 1);
				isused[i] = false;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	cin >> n;
	func(1);
	return 0;
}
728x90
반응형