본문 바로가기

Coding Test

백준 15657 N과 M(8)

https://www.acmicpc.net/problem/15657

 

15657번: N과 M (8)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int n, m;

vector<int> arr;
vector<int> ans;


void dfs(int k, int cnt) {

    ans.push_back(k);

    if (cnt == m) {

        for (int i = 0; i < cnt; i++) {
            cout << ans[i] << " ";
        }
        cout << "\n";

        ans.pop_back();
        return;
    }

    for (int i = 0; i < n; i++) {
        if (k <= arr[i]) {
            dfs(arr[i], cnt + 1);
        }
    }

    ans.pop_back();




}

int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);



    cin >> n >> m;


    for (int i = 0; i < n; i++) {
        int temp;
        cin >> temp;
        arr.push_back(temp);
    }

    sort(arr.begin(), arr.end());

    for (int i = 0; i < n; i++) {
        dfs(arr[i], 1);
    }




    return 0;
}

 

입력을 받고, 수열이 비내림차순이어야 하므로 정렬을 한 뒤, 각 요소들에 대하여 dfs를 돌린다.

ans에 배열의 순서를 저장하고, 각 dfs에 전체 배열을 도는 동안 다음에 올 숫자가 비내림차순 조건을 만족하면 재귀적으로 dfs를 돌린다.

해당 배열의 크기가 m에 도달하면 그 배열을 출력한다.

'Coding Test' 카테고리의 다른 글

백준 16937 두 스티커  (2) 2024.04.03
백준 2512 예산  (0) 2024.04.02
백준 2467 용액  (1) 2024.04.01
백준 5639 이진 검색 트리  (2) 2024.03.31
백준 9342 염색체  (0) 2024.03.29