-
백준 15651 N과 M (3) | 중복순열 | C++[백준 알고리즘]/[C++] 2021. 3. 30. 11:24728x90반응형
이번 포스팅은 백준 15651번 N과 M (3)입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
기본 알고리즘
재귀함수를 이용해 구현한 중복순열
전체 코드
방법1 - 순열 코드에서 bool selected[] 코드 부분 제거
순열 코드 참고(scarlettb.tistory.com/126)
12345678910111213141516171819202122232425262728293031323334353637383940//백준15651 N과M(3)#include <iostream>#include <vector>using namespace std;const int MAX = 7;int N, M;int arr[MAX];vector<int> v;void print() {for (int i = 0; i < v.size(); i++) {cout << v[i] << " ";}cout << "\n";}void DFS(int cnt) {if (cnt == M) {print();return;}for (int i = 0; i < N; i++) {v.push_back(arr[i]);DFS(cnt + 1);v.pop_back();}}int main() {cin >> N >> M;for (int i = 0; i < N; i++) {arr[i] = i + 1; //arr[0]=1, arr[1]=2, ...}DFS(0);return 0;}cs 방법2 - int selected[] 사용
selected[cnt] = arr[i] //cnt번째 뽑은 카드는 arr[i]
1234567891011121314151617181920212223242526272829303132333435363738//백준15651 N과M(3)#include <iostream>using namespace std;const int MAX = 7;int N, M;int arr[MAX];int selected[MAX];void print() {for (int i = 0; i < M; i++) {cout << selected[i] << " ";}cout << "\n";}void DFS(int cnt) {if (cnt == M) {print();return;}for (int i = 0; i < N; i++) {selected[cnt] = arr[i];DFS(cnt + 1);}}int main() {cin >> N >> M;for (int i = 0; i < N; i++) {arr[i] = i + 1; //arr[0]=1, arr[1]=2, ...}DFS(0);return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 9663 N-Queen | 백트래킹, DFS | C++ (0) 2021.04.01 백준 15652 N과 M (4) | 중복조합 | C++ (0) 2021.03.30 백준 15649 N과 M (1) | 순열 | C++ (0) 2021.03.30 백준 15650 N과 M (2) | 조합 | C++ (0) 2021.03.30 백준 1766 문제집 | C++ (0) 2021.03.29