프로그래밍 문제풀이
백준 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() 함수의 조건식을 약간 수정하여 정상 동작을 확인하였다.