컴퓨터기본/문제풀이

[백준] 15650번: N과 M (2)

차가운오미자 2021. 9. 13. 10:31

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

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

문제 이해

DFS를 이용해서 모든 수열을 구하면 된다.

작성 코드

#include <iostream> 
using namespace std; 
int N, M; 
int visited[9]; 
int ans[9]; 
void Check(int cnt, int start){ 
	if(cnt == M){
    	for(int i = 0; i<M; i++){
        	cout << ans[i] << " "; 
        } 
        cout << "\n"; 
        return; 
    }
    else{ 
    	for(int i = start; i<=N; i++){
        	if(!visited[i]){
            	visited[i] = 1; 
                ans[cnt] = i; 
                Check(cnt+1, i+1); 
                visited[i] = 0; 
                } 
            } 
        } 
    } 
int main(void){ 
	cin >> N >> M; 
    Check(0, 1); 
}