Algorithm/Problem Solve

[백준 15650번] N과 M(2) (C++ / Python)

아네스 2021. 1. 2. 00:34
반응형

단순했다.

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()
    

 

반응형