백준 15654 N과 M (5) (C++)

안유태·2023년 12월 11일
0

알고리즘

목록 보기
201/239

15654번: N과 M (5)

백트래킹을 이용한 문제이다. 간단하게 풀 수 있었다.



#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int N, M;
vector<int> v;
vector<int> result;
bool check[8];

void dfs() {
	if (result.size() == M) {
		for (int i = 0; i < result.size(); i++) {
			cout << result[i] << " ";
		}
		cout << "\n";

		return;
	}

	for (int i = 0; i < v.size(); i++) {
		if (check[i]) continue;

		check[i] = true;
		result.push_back(v[i]);
		dfs();
		check[i] = false;
		result.pop_back();
	}
}

void solution() {
	sort(v.begin(), v.end());
	dfs();
}

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

	cin >> N >> M;

	int a;
	for (int i = 0; i < N; i++) {
		cin >> a;
		v.push_back(a);
	}

	solution();
	
	return 0;
}
profile
공부하는 개발자

0개의 댓글