[BOJ알고리즘, C++]#15650_N과 M(2)
BOJ 알고리즘 문제 풀이, 15650문제 N과 M(2)
조합 문제를 백 트래킹을 활용해 해결하는 방법에 대해 알아보겠습니다.
Overview
- 문제
- 풀이
- 코드
#0. 문제
#1. 풀이
1. 백 트래킹
// 링크
- 조합 문제는 백 트래킹 알고리즘을 활용하는 대표적인 문제 중 하나입니다.
- 백 트래킹 알고리즘은 문제 해결을 위해 여러 후보 해결책들을 점진적으로 탐색하며, 현재 선택한 경로가 해결책으로 이어질 수 없다고 판단되면, 이전 단계로 돌아가 다른 경로에 대한 탐색을 시도하는 알고리즘입니다. 이를 통해, 효율적으로 문제의 모든 가능한 후보 해결책들을 탐색할 수 있습니다.
2. 조합
- 조합(nCm)은 서로 다른 n개 중에서 순서 상관없이 m개를 선택하는 것입니다.
- 이때, 우리가 주목할 점은 "순서"입니다. 조합의 경우, "1, 2"와 "2, 1"은 동일한 경우로 취급합니다.
#2. 코드
1. 코드
#include <iostream>
#include <vector>
using namespace std;
int N, M;
vector<int> ans;
void dfs(int depth, int start)
{
if(depth == M)
{
for(int i=0 ;i<M; i++)
{
cout << ans[i] << ' ';
}
cout << '\n';
return;
}
for(int i=start; i<=N; i++)
{
ans.push_back(i);
dfs(depth+1, i+1);
ans.pop_back();
}
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin >> N >> M;
dfs(0, 1);
return 0;
}
'문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글
[BOJ알고리즘, C++]#1991_트리 순회, 전위 순회, 중위 순회, 후위 순회 (0) | 2023.07.28 |
---|---|
[BOJ알고리즘, C++]#11725_트리의 부모 찾기, 트리 탐색 (0) | 2023.07.28 |
[BOJ알고리즘, C++]#10866_덱, 선형 자료구조 (0) | 2023.06.22 |
[BOJ알고리즘, C++]#1966_프린터 큐, 우선순위 큐, 큐 (0) | 2023.06.22 |
[BOJ알고리즘, C++]#18258_큐2, 선형 자료구조, 큐 (0) | 2023.06.22 |