코딩/백준 - c++

[백준] 15651번 N과 M (3) - c++

코딩 코딩 코오딩 2022. 3. 20. 21:08

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

 

15651번: N과 M (3)

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

www.acmicpc.net

#include<iostream>

using namespace std;
int arr[9];
bool visited[9] = {false,};
int n, m;
void dfs(int cnt ) {
	if (cnt == m) {
		for (int i = 0; i < m; i++) {
			cout << arr[i] << ' ';
		}
		cout << '\n';
	}
	else {
		for (int i = 1; i <=n ; i++) {
			
			visited[i] = true;
			arr[cnt] = i;
			dfs(cnt + 1);
			visited[i] = false;
			
		}
	}
}
int main() {
	
	cin >> n >> m;
	dfs(0);
}

n 과 m 시리즈를 모두 풀었다 마지막 문제는 좀 쉬웠다?

하지만 이 백트래킹 문제는 꼭 숙지해두자 

재귀가 들어가기 때문에 사고를 많이 요하는 거 같다.

생각해야할것

1. 중단 조건 생각하기

2. 인수에 들어갈 인자에 대하여 고려하기

3. 함수 진행 과정 생각해보기

반응형