백준 15663번: N과 M (9)

danbibibi·2022년 1월 8일
0

문제

문제 바로가기> 백준 15663번: N과 M (9)

풀이

재귀를 이용한 backtraking으로 문제를 풀었다. 사전 순으로 출력하기 위해 사전에 정렬을 진행했고, 중복되는 수열을 여러 번 출력하지 않기 위해 같은 cnt일 경우 이전에 고른 수는 방문하지 않았다.

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

int n,m;
int num[9]{};
int ans[9]{};
bool visit[9]={false};

void backtracking(int cnt){
    if(cnt == m){
        for(int i=0; i<m; i++) cout << ans[i] << ' ';
        cout << '\n';
        return;
    }
    int prev_num = -1;
    for(int i=1; i<=n; i++){
        if(!visit[i] && prev_num!=num[i]){
            visit[i] = true;
            ans[cnt] = num[i];
            prev_num = num[i];
            backtracking(cnt+1);
            visit[i] = false;
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    cin>>n>>m;
    for(int i=1; i<=n; i++) cin>>num[i];
    sort(num, num+n+1);
    backtracking(0);
}
profile
블로그 이전) https://danbibibi.tistory.com

0개의 댓글