출처 : https://www.acmicpc.net/problem/15654
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
고려사항
- next_permutation 을 활용하여 수열 구하기.
- 첫 next_permutation 반복문에서는 뽑을 수들을 정하고, 이들을 벡터에 담아 수열들을 구하여
정답 벡터에 삽입. - 정렬하여 출력.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b){
return a > b;
}
int main() {
vector<int> v;
vector<int> num;
vector<vector<int>> ans;
int n, m, tmp;
cin>>n>>m;
for(int i=0;i<n;++i){
cin>>tmp;
num.push_back(tmp);
if(i < n-m){
v.push_back(0);
}else{
v.push_back(1);
}
}
sort(num.begin(), num.end(), cmp);
do{
vector<int> tmp;
for(int i=n-1;i>=0;--i){
if(v[i]){
tmp.push_back(num[i]);
}
}
do{
ans.push_back(tmp);
}while(next_permutation(tmp.begin(), tmp.end()));
}while(next_permutation(v.begin(), v.end()));
sort(ans.begin(), ans.end());
for(auto i : ans){
for(auto j : i){
cout<<j<<" ";
}
cout<<"\n";
}
return 0;
}
'BOJ 백준 > 기타' 카테고리의 다른 글
| 백준 02750 - 수 정렬하기 (0) | 2020.11.18 |
|---|---|
| 백준 01920 - 수 찾기 (0) | 2020.11.17 |
| 백준 07662 - 이중 우선순위 큐 (0) | 2020.11.12 |
| 백준 02749 - 피보나치 수 3 (0) | 2020.11.11 |
| 백준 12015 - 가장 긴 증가하는 부분 수열 2 (0) | 2020.11.10 |
