[백준 알고리즘]/[C++]
백준 15654 N과 M (5) | 조합 | C++
말하는펭귄
2021. 4. 6. 14:01
728x90
반응형

이번 포스팅은 백준 15654번 N과 M (5)입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
기본 알고리즘
조합을 재귀함수로 구현
15650번과 정렬이 되어있지 않은 입력 값들이 들어온다는 점만 제외하면 동일한 문제
15650번 풀이 참고 - scarlettb.tistory.com/125
백준 15650 N과 M (2) | 조합 | C++
이번 포스팅은 백준 15650번 N과 M (2)입니다. 아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다. www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열..
scarlettb.tistory.com
전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
//백준15654 N과 M (5)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 8;
int N, M;
vector<int> list;
bool selected[MAX];
vector<int> ans;
void print() {
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << " ";
}
cout << "\n";
}
void DFS(int cnt) {
if (cnt == M) {
print();
return;
}
for (int i = 0; i < N; i++) {
if (selected[i]) continue;
selected[i] = true;
ans.push_back(list[i]);
DFS(cnt + 1);
ans.pop_back();
selected[i] = false;
}
}
int main() {
cin >> N >> M;
for (int i = 0; i < N; i++) {
int n;
cin >> n;
list.push_back(n);
}
sort(list.begin(), list.end());
DFS(0);
return 0;
}
|
cs |

728x90
반응형