백준/백트래킹

[백준] C++ 15654(N과 M(5))

2zreal 2024. 7. 8. 18:01

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

void DFS(int stop,int visited[10]);

int arr[10];
int result[10];

int n=0;
int m=0;

int main(void)
{
    ios::sync_with_stdio(false);
  	cin.tie(NULL);
	cin>>n>>m;
	
	for(int i=0; i<n; i++)
	{
		cin>>arr[i];
	}
	
	sort(arr,arr+n);
	int visited[10]={0};
	DFS(0,visited);
	
	return 0;
}



void DFS(int stop,int visited[10])
{	
	int temp[10];
	
	for(int i=0; i<n; i++)
	{
		for(int i=0; i<10; i++)
		{
			temp[i]=visited[i];
		}
		int k=0;
		if(visited[i]==0)
		{
			result[stop]=arr[i];
			temp[i]=1;
			k=1;
		}
		
		
		if(stop+1<m&&k==1)
		{
			DFS(stop+1,temp);
		}
		else if(k==1)
		{
			for(int i=0; i<m; i++)
			{
				cout<<result[i]<<" ";
			}
			cout<<'\n';
		}
		
	}
}

 

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

void DFS(int stop);

int arr[10];

int n=0;
int m=0;

int main(void)
{
    ios::sync_with_stdio(false);
  	cin.tie(NULL);
	cin>>n>>m;
	
	for(int i=0; i<n; i++)
	{
		cin>>arr[i];
	}
	
	sort(arr,arr+n);
	
	DFS(0);
	
	return 0;
}
int result[10];
void DFS(int stop)
{	
	for(int i=0; i<n; i++)
	{
		int k=0;
		
		result[stop]=arr[i];
		
		for(int i=0; i<=stop; i++)
		{
			for(int j=i+1; j<=stop; j++)
			{
				if(result[i]==result[j])
				{
					k=1;
				}
			}
		}
		
		if(stop+1<m&&k==0)
		{
			DFS(stop+1);
		}
		else if(k==0)
		{
			for(int i=0; i<m; i++)
			{
				cout<<result[i]<<" ";
			}
			cout<<'\n';
		}
		
	}
}

 

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

void DFS(int stop);

int arr[10];
int result[10];
int visited[10]={0};

int n=0;
int m=0;

int main(void)
{
    ios::sync_with_stdio(false);
  	cin.tie(NULL);
	cin>>n>>m;
	
	for(int i=0; i<n; i++)
	{
		cin>>arr[i];
	}
	
	sort(arr,arr+n);
	
	DFS(0);
	
	return 0;
}



void DFS(int stop)
{	
	
	for(int i=0; i<n; i++)
	{
		int k=0;
		if(visited[i]==0)
		{
			result[stop]=arr[i];
			visited[i]=1;
			k=1;
		}
		
		if(stop+1<m&&k==1)
		{
			DFS(stop+1);
			visited[i]=0;
		}
		else if(k==1)
		{
			for(int i=0; i<m; i++)
			{
				cout<<result[i]<<" ";
			}
			cout<<'\n';
			visited[i]=0;
		}
		
		
	}
}

 

순열을 만드는 문제이다.

자꾸 시간초과가 떠서 뭐가 문제지 하고 다양한 방법으로 접근해 봤다.(그래... 시간초과가 날 수가 없는데)

그냥 cout<<endl;로 써서 시간초과가 발생한 것이었다. 하;; cout<<'\n'으로 작성해야 한다.

'백준 > 백트래킹' 카테고리의 다른 글

[백준] C++ 15663번(N과 M (9))  (0) 2024.07.08