본문 바로가기
알고리즘

백준 15665 N과 M (11) c++

by kyj0032 2024. 1. 15.

https://www.acmicpc.net/problem/15665

 

15665번: N과 M (11)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

 

코드

/*boj s2 15665 N과 M (11)*/
#include <algorithm>
#include <iostream>
#define MAXN 105
using namespace std;

int N, M;
int arr[MAXN];
int ans[MAXN];

void func(int k) {
    if (k == M) {
        for (int m = 0; m < M; m++) {
            cout << ans[m] << " ";
        }
        cout << "\n";
        return;
    }

    int tmp = 0;
    for (int j = 0; j < N; j++) {
        if (tmp == arr[j]) continue; // 똑같은 수를 또 넣음
        ans[k] = arr[j];
        tmp = arr[j];
        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 >> arr[i];

    sort(arr, arr + N);

    func(0);
}