문제 : https://www.acmicpc.net/problem/15665
[ 알고리즘풀이 ]
입력값에서 중복을 제외하고 Backtracking 을 이용해 M개를 뽑으면 된다.
#include<iostream>
#include<vector>
using namespace std;
int N, M, x;
vector<int> input;
bool check[10001] = {};
void Backtracking(vector<int> v) {
if (v.size() == M) {
for (int i = 0; i < v.size(); i++)
cout << v[i] << ' ';
cout << '\n';
return;
}
for(int i = 0; i < input.size(); i++){
v.push_back(input[i]);
Backtracking(v);
v.pop_back();
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> x;
check[x] = 1;
}
for (int i = 0; i <= 10000; i++)
if (check[i])
input.push_back(i);
vector<int> v;
Backtracking(v);
return 0;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1126 : 같은 탑 - travelbeeee (0) | 2020.03.18 |
---|---|
[BOJ] 16434 : 드래곤 앤 던전 - travelbeeee (0) | 2020.03.17 |
[BOJ] 2096 : 내려가기 - travelbeeee (0) | 2020.03.17 |
[BOJ] 11003 : 최솟값 찾기 - travelbeeee (0) | 2020.03.17 |
[BOJ] 8120 : Coding of Permutations - travelbeeee (0) | 2020.03.16 |