November 16, 2021 ( last updated : November 16, 2021 )
백트랙킹
알고리즘
https://github.com/sneakstarberry/
[백준] 15657번 N과 M (8)
dfs
로 모든 경우의 수를 확인하면서 수열을 출력하는데 수열에 넣을 때 비내림차순을 지키면서 수열에 숫자를 넣습니다. 그리고 기저조건으로 M
과 같은 수가 되면 현재 수열을 출력합니다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N, M;
int arr[9];
vector<int> vec;
void dfs(int cnt) {
if( cnt >= M) {
for (int i=0; i<M; i++) {
cout << vec[i] << ' ';
}
cout << '\n';
return;
};
for (int i=0; i<N; i++) {
if(!vec.empty() && vec.back() > arr[i]) continue;
vec.push_back(arr[i]);
dfs(cnt+1);
vec.pop_back();
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N >> M;
for (int i=0; i<N; i++) {
cin >> arr[i];
}
sort(arr, arr+N);
dfs(0);
return 0;
}
Originally published November 16, 2021
Latest update November 16, 2021
Related posts :