백준 15652번: N과 M (4)

danbibibi·2022년 1월 7일
0

문제

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

풀이

재귀를 이용한 backtraking으로 문제를 풀었다. 같은 수를 여러번 고를 수 있도록 하고 중복되는 수열을 없도록 하기 위해서 m번 만큼 같은 수를 사용할 수 있도록 해주었고, 같은 i 부터 다시 반복문을 돌 수 있도록 하였다.

#include<iostream>
using namespace std;

int n, m;
int num[9]{};
int visit[9]{};

void backtracking(int from, int cnt){
    if(cnt == m){
        for(int i=0; i<m; i++) cout << num[i] << ' ';
        cout << '\n';
        return ;
    }
    for(int i=from; i<=n; i++){
        if(visit[i]<m){
            visit[i]++;
            num[cnt] = i;
            backtracking(i, cnt+1);
            visit[i]--;
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    cin>>n>>m;
    backtracking(1, 0);
}
profile
블로그 이전) https://danbibibi.tistory.com

0개의 댓글