내 코드
#include <bits/stdc++.h>
using namespace std;
int n,m;
int field[10];
int arr[10];
void func(int k,int st)
{
if(k==m)
{
for(int i = 0;i<m;i++)
cout << arr[i] << ' ';
cout << '\n';
return;
}
int temp = 0;
for(int i =st;i<n;i++)
{
if(temp==field[i]) continue;
arr[k] = field[i];
temp = arr[k];
func(k+1,i);
}
}
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0;i<n;i++)
cin >> field[i];
sort(field,field+n);
func(0,0);
}
- 시간복잡도를 줄이기 위해
func()
함수에 이전에 저장한 값
을 전달해 i=0
부터 비교하는 것보다, 이전에 저장한 인덱스
인자를 전달해, 반복문 비교횟수를 줄였다.
func(k+1,i+1)
이 아닌 func(k+1,i)
로 호출해야한다. (중복이 허용되니까..!)
- 정답코드도 매우 유사하여 생략하겠습니다.