15649 - N과 M (1)

15649 문제 링크

접근법

재귀함수를 통한 DFS를 통해 구현할 수 있다.

#include <iostream>
#include <stdio.h>
#include <vector>

#include <time.h>

using namespace std;

bool visit[8] = {0,};
int num[8] = {1,2,3,4,5,6,7,8};
int M,N;
vector <int> vec;

void dfs(int cnt)
{
    if(cnt == N)
    {
        for(int i=0; i< vec.size(); i++)
        {
            printf("%d ", vec[i]);
        }
    printf("\n");

    }else
    {
        for(int i=0; i< M; i++)
        {
            if(visit[i] == 0)
            {
                vec.push_back(num[i]);
                visit[i] = 1;
                dfs(cnt+1);
                vec.pop_back();
                visit[i] = 0;
            }
        }
    }

}


int main(void) {
    cin >> M >> N;
    dfs(0);
    return 0;
}

결론

아직 재귀함수를 쓰는데 불편하다라는 생각이 많이 든다. 공부를 더 해야할 것 같다.

업데이트: