반응형
단순했다.
N개 중에 M개를 뽑아 조합을 만드는 문제.
C++은 재귀로 풀고, python은 itertools의 combinations를 제공해준다.
C++ 풀이
dfs의 for문은 그림과 같은 방식
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
vector<int> comb;
vector<vector<int>> res;
int M, N;
void print_comb()
{
for (int i = 0; i < comb.size(); i++)
{
cout << comb[i] << " ";
}
cout << '\n';
}
void dfs(int start)
{
//comb에 만들어진 숫자들의 조합이 제시된 M과 같아지면
if ((int)comb.size() == M) {
print_comb(); // comb vector를 출력한다.
return;
}
for (int i = start; i <= N; i++) // start부터 넣기 시작.
{
comb.push_back(i); // i를 넣고,
dfs(i + 1); // i+1부터 시작해서 다시 push시작.
comb.pop_back(); //꽉차서 리턴 되서 나오면 pop하나 해준다.
}
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
//1부터 시작.
dfs(1);
}
Python 풀이
python 개사기..
import sys
from itertools import combinations
input = sys.stdin.readline
N, M = list(map(int,input().rstrip().split()))
com = [i for i in range(1,N+1)]
combi = list(combinations(com, M))
for item in combi:
for i in item:
print(i, end= ' ')
print()
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 9465번] 스티커 (C++) (0) | 2021.01.06 |
---|---|
[백준 15654번] N과 M (5) (C++ / Python) (0) | 2021.01.02 |
[백준 1753번] 최단경로 (C++) (0) | 2020.12.31 |
[백준 1167번] 트리의 지름 (C++ / Python) (0) | 2020.12.30 |
[백준 1149번] RGB거리 (DP기본 / C++) (0) | 2020.12.30 |