반응형
문제집: N과 M (baekjoon)
www.acmicpc.net
문제를 홀수, 짝수로 나누어 홀수 문제는 순서가 있고, 짝수 문제는 순서가 없다(정렬).
1. 15649
#include <iostream>
#include <vector>
using namespace std;
int n, m;
void rec(vector<int> v, vector<bool> visited, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = 1; i <= n; ++i){
if(visited[i])
continue;
visited[i] = true;
v.push_back(i);
rec(v, visited, cnt+1);
visited[i] = false;
v.pop_back();
}
}
int main(void){
cin >> n >> m;
vector<int> v;
vector<bool> visited(n+1);
rec(v, visited, 0);
}
2. 15650
#include <iostream>
#include <vector>
using namespace std;
int n, m;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = pos; i <= n; ++i){
v.push_back(i);
rec(v, i+1, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
vector<int> v;
vector<bool> visited(n+1);
rec(v, 1, 0);
}
3. 15651
#include <iostream>
#include <vector>
using namespace std;
int n, m;
void rec(vector<int> v, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = 1; i <= n; ++i){
v.push_back(i);
rec(v, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
vector<int> v;
rec(v, 0);
}
4. 15652
#include <iostream>
#include <vector>
using namespace std;
int n, m;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = pos; i <= n; ++i){
v.push_back(i);
rec(v, i, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
vector<int> v;
vector<bool> visited(n+1);
rec(v, 1, 0);
}
5. 15654
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
void rec(vector<int> v, vector<bool> visited, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = 0; i < n; ++i){
if(visited[i])
continue;
visited[i] = true;
v.push_back(input[i]);
rec(v, visited, cnt+1);
visited[i] = false;
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
vector<bool> visited(n+1);
rec(v, visited, 0);
}
6. 15655
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = pos; i < n; ++i){
v.push_back(input[i]);
rec(v, i+1, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
vector<bool> visited(n+1);
rec(v, 0, 0);
}
7. 15656
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
void rec(vector<int> v, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = 0; i < n; ++i){
v.push_back(input[i]);
rec(v, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
rec(v, 0);
}
8. 15657
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = pos; i < n; ++i){
v.push_back(input[i]);
rec(v, i, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
vector<bool> visited(n+1);
rec(v, 0, 0);
}
중복을 제거하기 위해 출력 전 수열을 vector에 넣은 후 erase( )를 사용하여 중복을 제거한 후 한번에 출력했다.
9. 15663
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
vector<vector<int>> output;
void rec(vector<int> v, vector<bool> visited, int cnt){
if(cnt == m){
output.push_back(v);
}
for(int i = 0; i < n; ++i){
if(visited[i])
continue;
visited[i] = true;
v.push_back(input[i]);
rec(v, visited, cnt+1);
visited[i] = false;
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
vector<bool> visited(n+1);
rec(v, visited, 0);
sort(output.begin(), output.end());
output.erase(unique(output.begin(), output.end()), output.end());
int len = output.size();
for(int i = 0; i < len; ++i){
for(int j = 0; j < m; ++j){
cout << output[i][j];
if(j < m-1)
cout << ' ';
else
cout << '\n';
}
}
}
10. 15664
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
vector<vector<int>> output;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
output.push_back(v);
return;
}
for(int i = pos; i < n; ++i){
v.push_back(input[i]);
rec(v, i+1, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
vector<int> v;
rec(v, 0, 0);
sort(output.begin(), output.end());
output.erase(unique(output.begin(), output.end()), output.end());
int len = output.size();
for(int i = 0; i < len; ++i){
for(int j = 0; j < m; ++j){
cout << output[i][j];
if(j < m-1)
cout << ' ';
else
cout << '\n';
}
}
}
11. 15665
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
void rec(vector<int> v, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = 0; i < n; ++i){
v.push_back(input[i]);
rec(v, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
input.erase(unique(input.begin(), input.end()), input.end());
n = input.size();
vector<int> v;
rec(v, 0);
}
12. 15666
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> input;
vector<vector<int>> output;
void rec(vector<int> v, int pos, int cnt){
if(cnt == m){
for(int i = 0; i < m; ++i){
cout << v[i];
if(i < m-1)
cout << ' ';
else
cout << '\n';
}
return;
}
for(int i = pos; i < n; ++i){
v.push_back(input[i]);
rec(v, i, cnt+1);
v.pop_back();
}
}
int main(void){
cin >> n >> m;
for(int i = 0; i < n; ++i){
int num;
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
input.erase(unique(input.begin(), input.end()), input.end());
n = input.size();
vector<int> v;
rec(v, 0, 0);
}
반응형
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 - 1719 : 택배 (0) | 2020.12.22 |
---|---|
[C++] 백준 - 15684 : 사다리 조작 (0) | 2020.12.21 |
[C++] 백준 - 17828 : 문자열 화폐 (0) | 2020.12.19 |
[C++] 백준 - 1987 : 알파벳 (0) | 2020.12.19 |
[C++] 백준 - 1027 : 고층 건물 (0) | 2020.12.19 |