#include <iostream>
#include <vector>
#include <algorithm>
 
int N = 0;
int M = 0;
int iCount = 0;
bool visit[10] = {};
std::vector<int> vec = {};
std::vector<int> vecAns = {};
 
void DFS(int iStart, int iSize)
{
    if (iSize == M)
    {
        for (int i = 0; i < M; ++i)
        {
            std::cout << vecAns[i] << " ";
        }
 
        std::cout << "\n";
        return;
    }
 
    int iPrev = 0;
    for (int i = 0; i < N; ++i)
    {
        if (iPrev != vec[i])
        {
            if (!visit[i])
            {
                visit[i] = true;
                iPrev = vec[i];
                vecAns[iSize] = vec[i];
                DFS(i, iSize + 1);
                visit[i] = false;
            }
        }
    }
 
    return;
}
 
int main() 
{
    std::cin >> N >> M;
 
    for (int i = 0; i < N; ++i)
    {
        int iNumber = 0;
        std::cin >> iNumber;
 
        vec.push_back(iNumber);
    }
 
    std::sort(vec.begin(), vec.end());
    vecAns.resize(M);
 
    DFS(0, 0);
 
    return 0;
}
 

이번 문제도 아주 약간 다릅니다. 중복이 되면 안됩니다.

그렇기에 이전에 했는가 체크만 하고 계쏙해서 실행합니다.

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 15686 치킨 배달  (0) 2022.11.05
[C++] 백준 15666 N과 M (12)  (0) 2022.11.04
[C++] 백준 15657 N과 M(8)  (0) 2022.11.02
[C++] 백준 15652 N과 M(4)  (0) 2022.11.01
[C++] 백준 14938 서강그라운드  (0) 2022.10.31

+ Recent posts