컴퓨터기본/문제풀이

[백준] 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); 
}

'컴퓨터기본 > 문제풀이' 카테고리의 다른 글

[백준] 2589번: 보물섬  (0) 2021.09.14
[백준] 15651번. N과 M(3)  (0) 2021.09.13
[백준] 15649번: N과 M(1)  (0) 2021.09.12
[백준] 10814번: 나이순 정렬  (0) 2021.09.11
[백준] 1181번: 단어 정렬  (0) 2021.09.11