BOJ 15650 : N과M (2) - C++

김정욱·2021년 3월 4일
0

Algorithm - 문제

목록 보기
136/249

N과M (2)

코드

[ 백트래킹 코드 ]

#include <iostream>

using namespace std;
int N, M;
int arr[10];
void func(int depth, int start){
    if(depth == M){
        for(int i=0;i<M;i++)
            cout << arr[i] << ' ';
        cout << '\n';
    }else{
        for(int i=start;i<N;i++)
        {  
            arr[depth] = i+1;
            func(depth+1, i+1);
        } 
    }
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> N >> M;
    func(0,0);
    return 0;
}
  • 다음 시작될 순서인 start변수를 넘겨서 큰 순서로 만듬!

[ next_permutation 코드]

#include <iostream>
#include <algorithm>
using namespace std;
int N, M;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> N >> M;
    int arr[N];
    /* 뽑는 개수인 M만큼만 0으로 채워야 함 */
    fill(arr, arr+N, 1);
    for(int i=0;i<M;i++) arr[i] = 0;
    /* 4개중 2개 뽑는 경우의수를 출력 */
    do{
        /* 어차피 0으로 구분되기 때문에 
            자연스럽게 오름차순으로 나온다! */
        for(int i=0;i<N;i++)
            if(!arr[i])
                cout << i+1 << ' ';
        cout << '\n';
    }while(next_permutation(arr,arr+N));
    return 0;
}
profile
Developer & PhotoGrapher

0개의 댓글