문제 링크 : www.acmicpc.net/problem/15657
내 풀이(2021.1.29.) :
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> list;
int N, M;
void dfs(int start, int depth, vector<int>& v) {
if (v.size() == M) {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
return;
}
for (int i = start; i < N; i++) {
v.push_back(list[i]);
dfs(i, depth + 1, v);
v.pop_back();
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
for (int i = 0; i < N; i++) {
int temp; cin >> temp; list.push_back(temp);
}
sort(list.begin(), list.end());
vector<int> v;
dfs(0, 0, v);
return 0;
}
요구사항 : 서로 다른 N개의 수가 주어졌을 때, 수를 M번 선택해서 만들 수 있는 모든 순열 (같은 수 중복 선택 가능)
'알고리즘 > 조합, 순열' 카테고리의 다른 글
백준 15686번 : 치킨 배달 (0) | 2021.01.28 |
---|---|
STL을 이용한 조합과 순열 코드 (0) | 2021.01.28 |
프로그래머스 스킬 체크 (레벨2) - 조합 문제 (0) | 2021.01.19 |