[15666] N과 M(12)

!·2022년 7월 19일
0

내 코드

#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) 로 호출해야한다. (중복이 허용되니까..!)
  • 정답코드도 매우 유사하여 생략하겠습니다.
profile
개발자 지망생

0개의 댓글