C언어/문제풀다 하나씩

백준 15663 n 과 m 9번

mcdn 2021. 1. 18. 00:42
반응형
#include <iostream>
using namespace std;
​
int arr[8];
int visited[8];
int prevarr[8];
int printarr[8];
​
void	sort_up(int arr[8], int num) // sort(arr, arr+n) algorithm
{
	int tmp;
​
	for (int i = 0; i < num - 1; i++)
	{
		for (int j = i + 1; j < num; j++)
		{
			if (arr[i] > arr[j])
			{
				tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
				//cout << arr[i] << arr[j] << " ";
			}
		}
	}
}
​
void	dfs(int lev, int n, int m)
{
	if (lev == m)
	{
		for (int i = 0; i < m; i++)
		{
			cout << printarr[i] << " ";
		}
		cout << "\n";
		return ; // return 안 하면 에러 난다!!!!!!!!
	}
	int jun;
	jun = 0;
	for (int i = 0; i < n; i++)
	{
		if (visited[i] == 0 && jun != arr[i] ) // && printarr[lev] != arr[i]
		{
			visited[i] = 1;
			jun = arr[i];
			printarr[lev] = arr[i];
			dfs(lev + 1, n, m);
			visited[i] = 0;
		}
	}
}
​
int main(void)
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	sort_up(arr, n);
	dfs(0, n, m);
	// for (int i = 0; i < n; i++)
	// {
	// 	cout << arr[i];
	// }
}
​
​
/*
test1
3 3
1 1 2
-> 3줄
1 1 2
1 2 1
2 1 1
​
​
​
*/

백준 

n 과 m 시리즈 중 갑자기 달라져서 놀람 

 

1 7 9 9 가 주어졌을 때 

9 1 

9 7 

9 9 

뒤에 9 1 9 7  9 9 가 또 반복되지 않도록 

for (int i = 0; i < n; i++)

{

if (visited[i] == 0 && jun != arr[i] )

visited[i] = 1;

jun = arr[i];

printarr[lev] = arr[i];

dfs(lev + 1, n, m);

visited[i] = 0;

}

}

여기를 다르게 해줬다.jun 을 for 문을 기점으로 계속 초기화하면서 바로 직전 jun이랑 같은지 확인했다. 

반응형