내 코드
#include <bits/stdc++.h>
using namespace std;
int field[10];
int arr[10];
int n,m;
void func(int k)
{
if(k==m)
{
for(int i =0;i<m;i++)
cout << arr[i] << ' ';
cout << '\n';
return;
}
int temp = 0;
for(int i = 0;i<n;i++)
{
if(temp!=field[i])
{
arr[k] = field[i];
temp = arr[k];
func(k+1);
}
}
}
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);
}
정답
#include <bits/stdc++.h>
using namespace std;
int n, m;
int arr[10];
int num[10];
void func(int k){
if(k == m){
for(int i = 0; i < m; i++)
cout << num[arr[i]] << ' ';
cout << '\n';
return;
}
for(int i = 0; i < n; i++){
arr[k] = i;
func(k+1);
}
}
vector<bool> chk(10002);
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
int idx = 0;
while(n--){
cin >> num[idx];
if(chk[num[idx]]) continue;
chk[num[idx]] = true;
idx++;
}
n = idx;
sort(num, num+n);
func(0);
}
- 초기에 N개의 자연수를 입력받을 때, 중복되는 수들을 제거한다.
- 그리고
arr
배열에는 인덱스 값들을 저장하는 방식.
- 내풀이가 더 깔끔한 것 같다..