프로그래밍 문제풀이

백준 1562번: N과 M (4)

컴퓨터공부용 2023. 4. 2. 10:48

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

 

15652번: N과 M (4)

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

www.acmicpc.net

#include <stdio.h>

#define MAX 8

int check(int arr[], int current, int i){
   int x, a = 1;
   
   for(x=0;x<current;x++)
       if(arr[x] > i) a = 0;
   
   return a;
}

void print(int arr[], int m){
    int i;
    for(i=0;i<m;i++)
        printf("%d ", arr[i]);
    printf("\n");
}

void n_m(int arr[], int n, int m, int current){
    int i;
    if(current == m) {
        print(arr,m);
        return;
    }
    
    for(i=1;i<=n;i++){
        if(check(arr, current, i)) {
            arr[current] = i;
            n_m(arr,n,m,current+1);
        }
    }
}

int main()
{
    int n, m;
    int arr[MAX];
    
    scanf("%d %d", &n, &m);
    n_m(arr, n, m, 0);

    return 0;
}

N과 M (2) 번 문제에서 사용하였던 check() 함수의 조건식을 약간 수정하여 정상 동작을 확인하였다.