[백준/c++] 15652번 : N과 M(4)

문제 링크 - https://www.acmicpc.net/problem/15652

[문제]

[풀이]

  • N과 M(2) 문제는 중복없이 오름차순인 수열을 출력하는 문제였다.
  • 이번 N과 M(4)문제는 비내림차순을 만족하면 되는데 이전 index의 수와 같거나 큰 수를 만족하면 된다. 즉, start를 통해 시작하는 숫자를 지정해주면서 중복 검사를 생략하면 된다.
  • 이전 N과 M(2)의 코드에서 check[10]를 통해 중복검사 하는 부분을 빼주고, 다음 재귀함수로 넘어갈때 (중복이 가능하므로) start에 i+1이 아닌 i를 넣어주었다.

[코드]

//15652. N과 M(4)
#include <iostream>
using namespace std;

int check[10];
int arr[10];

void func(int index,int start, int n,int m){
    if(index>m){
        for(int i=1; i<=m; i++){
            cout<<arr[i]<<" ";
        }
        cout<<"\n";
        return;
    }

    for(int i=start; i<=n; i++){
        arr[index]=i;
        func(index+1,i,n,m);
    }
}

int main(){
    int n,m;
    cin>>n>>m;
    func(1,1,n,m);  
 
}

좋은 웹페이지 즐겨찾기