문제

https://www.acmicpc.net/problem/15656
15656번: N과 M (7)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> v;
int arr[9];
void dfs(int cnt){
if(cnt == m){
for(int i=0; i<m; i++){
cout << arr[i]<< ' ';
}
cout << '\n';
return;
}
for(int i=0; i<n; i++){
arr[cnt] = v[i];
dfs(cnt+1);
}
}
int main(){
cin >> n >> m;
for(int i=0; i<n; i++){
int a;
cin >> a;
v.push_back(a);
}
sort(v.begin(), v.end());
dfs(0);
return 0;
}
정리
이 문제와 15651번의 차이점은 15651번은 수열 원소의 범위를 1부터 N까지 범위를 지정한 반면 이 문제는 서로 다른 원소 N개를 입력받는다. 즉 15651번 코드에서 N개의 원소들을 입력받고 오름차순으로 정렬해주는 코드를 작성하면 해결할 수 있다.
참조
'Beakjoon > backtracking' 카테고리의 다른 글
| [백준] 18290번 NM과 K (1) (C++) - backtracking (0) | 2022.04.26 |
|---|---|
| [백준] 15657번 N과 M (8) (C++) - backtracking (0) | 2022.04.15 |
| [백준] 15655번 N과 M (6) (C++) - backtracking (0) | 2022.04.15 |
| [백준] 15654번 N과 M (5) (C++) - backtracking (0) | 2022.04.15 |
| [백준] 15652번 N과 M (4) (C++) - backtracking (0) | 2022.04.15 |