Problem Solving/BOJ

[백준 15654번] [Backtracking] N과 M (5)

  • -
728x90
반응형

Approach

수열이 무작위로 주어지는 상황이므로 정렬을 하고, 어느 인덱스까지 사용했는지를 확인해주고 넣어주면 된다.

인덱스를 키워나가면서 계속 채우는 상황이므로 함수의 parameter에는 채우고 있는 index만 있으면 된다.

Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

using namespace std;
vector<int> v;
int N, M;
int visited[8];
int result[8];

void solve(int index){
    if(index == M){
        for(int i = 0; i < M; i++){
            if(i != M - 1) cout << result[i] << " ";
            else cout << result[i] << "\n";
        }
        return;
    }
    else{
        for(int i = 0; i < N; i++){
            if(visited[i]) continue;
            visited[i] = 1;
            result[index] = v[i];
            solve(index + 1);
            visited[i] = 0;
        }
        return;
    }
}

int main(void){
    fastio;
    memset(visited, 0, sizeof(visited));
    memset(result, 0, sizeof(result));
    cin >> N >> M;
    
    for(int i = 0; i < N; i++){
        int t;
        cin >> t;
        v.push_back(t);
    }

    sort(v.begin(), v.end());
    solve(0);
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.