https://www.acmicpc.net/problem/15657
15657번: N과 M (8)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> arr;
vector<int> ans;
void dfs(int k, int cnt) {
ans.push_back(k);
if (cnt == m) {
for (int i = 0; i < cnt; i++) {
cout << ans[i] << " ";
}
cout << "\n";
ans.pop_back();
return;
}
for (int i = 0; i < n; i++) {
if (k <= arr[i]) {
dfs(arr[i], cnt + 1);
}
}
ans.pop_back();
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
arr.push_back(temp);
}
sort(arr.begin(), arr.end());
for (int i = 0; i < n; i++) {
dfs(arr[i], 1);
}
return 0;
}
입력을 받고, 수열이 비내림차순이어야 하므로 정렬을 한 뒤, 각 요소들에 대하여 dfs를 돌린다.
ans에 배열의 순서를 저장하고, 각 dfs에 전체 배열을 도는 동안 다음에 올 숫자가 비내림차순 조건을 만족하면 재귀적으로 dfs를 돌린다.
해당 배열의 크기가 m에 도달하면 그 배열을 출력한다.
'Coding Test' 카테고리의 다른 글
| 백준 16937 두 스티커 (2) | 2024.04.03 |
|---|---|
| 백준 2512 예산 (0) | 2024.04.02 |
| 백준 2467 용액 (1) | 2024.04.01 |
| 백준 5639 이진 검색 트리 (2) | 2024.03.31 |
| 백준 9342 염색체 (0) | 2024.03.29 |