반갑습니다!

[백준] 15654 N과 M (5) 본문

알고리즘 문제 풀이

[백준] 15654 N과 M (5)

김덜덜이 2020. 4. 19. 02:26
15654번: N과 M (5)
 
www.acmicpc.net

풀이

백트래킹을 사용해서 순열을 구해주면 되는데, 이 때 숫자 배열은 정렬된 상태여야한다.

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n, m;
int num[8];
bool chk[8];
vector<int> ans;

void dfs(int idx, int cnt) {
    if (cnt == m) {
        for (int i : ans)
            cout << i << ' ';
        cout << '\n';
        return;
    }

    for (int i = 0; i < n; i++) {
        if (!chk[i]) {
            chk[i] = true;
            ans.push_back(num[i]);
            dfs(i, cnt + 1);
            ans.pop_back();
            chk[i] = false;
        }
    }
}

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

    cin >> n >> m;
    for (int i = 0; i < n; i++)
        cin >> num[i];

    sort(num, num + n);

    dfs(-1, 0);
    return 0;
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[백준] 17780 새로운 게임  (0) 2020.04.19
[백준] 3568 iSharp  (0) 2020.04.19
[SWEA] 최장 경로  (0) 2020.04.19
[SWEA] 2817 부분 수열의 합  (0) 2020.04.18
[SWEA] 1213 String  (0) 2020.04.18