#작성 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N, M;
int visit[8];
vector<int> v;

void dfs(int cnt){
	if( cnt == M ){
		for(int i=0; i<v.size(); i++){
			cout<<v[i]<<' ';
		}
		cout<<'\n';
		return;		// 출력 후에는 dfs함수를 반드시 종료시켜야한다 
	}
	
	for(int i=1; i<=N; i++){
		if( visit[i]==M ) continue;	// 최대 M번까지 방문할 수 있도록 
		visit[i]++;
		v.push_back(i);
		dfs(cnt+1);
		visit[i]--;
		v.pop_back();
	}
}

int main(){
	cin>>N>>M;
	dfs(0);
	return 0;
} 

##

앞의 문제들과 달리 중복순열을 구해야 한다.

visit배열을 int 형 배열로 선언하여 한 숫자를 최대 M번 사용할 수 있도록 했다.

'BOJ' 카테고리의 다른 글

BOJ 9663번 :: N-Queen  (0) 2019.11.26
BOJ 15652번 :: N과 M(4)  (0) 2019.11.25
BOJ 15650번 :: N과 M(2)  (0) 2019.11.24
BOJ 15649번 :: N과 M(1)  (0) 2019.11.24
BOJ 10814번 :: 나이순 정렬  (0) 2019.11.24

+ Recent posts