728x90
15650 N과 M (2)를 풀었다면, 정말 거저 먹는 문제이다!
시작하는 부분만 한 단계 낮추어, 중복이 가능하게 하면된다.
이것 역시 stack버전과, 그냥 배열을 쓴 버전 두가지를 참고하시라.
#include <cstdio>
int N, M;
int a[10];
void repeated_combination(int depth, int start){
if (depth == M){
for (int i=0; i<M; ++i) printf("%d ", a[i]);
puts("");
return;
}
for (int i=start; i<=N; ++i){
a[depth] = i;
repeated_combination(depth + 1, i);
}
}
int main() {
scanf("%d %d", &N, &M);
repeated_combination(0, 1);
return 0;
}
stack은 vector를 이용해 구현을 했다.
#include <iostream>
#include <vector>
using namespace std;
int N, M;
ostream & operator<< (ostream & os, const vector<int> & rhs) {
for (int i=0; i<rhs.size(); ++i)
os << rhs[i] << " ";
return os;
}
void repeated_combination(vector<int> & v, int start){
if (v.size() == M){
cout << v << '\n';
return;
}
for (int i=start; i<=N; ++i){
v.emplace_back(i);
repeated_combination(v, i);
v.pop_back();
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> N >> M;
vector<int> v;
repeated_combination(v, 1);
return 0;
}
728x90
'알고리즘, 자료구조 > 알고리즘' 카테고리의 다른 글
[백준] 15663. N과 M(9) (992) | 2019.10.19 |
---|---|
[백트래킹] 백준 2580 스도쿠 (0) | 2019.09.19 |
[백준] 15651 N과 M (3) - 중복순열 (0) | 2019.09.19 |
[백준] N과 M (2) - 조합 (0) | 2019.09.19 |
[백준] 15649 N과 M (1) - 순열 (2) | 2019.09.19 |
댓글