백준/15650/Backtracking/N과 M(2)

유기태·2023년 11월 18일

백준/15650/Backtracking/N과 M(2)
오름차순 + 1부터N까지 자연수 중에서 중복 없이 M개를 고른 수열을 나열하기 위해
백트래킹을 시도합니다.

for (int i = prev_num;i <= num_max;i++)
{
	result[len] = i;
	recursion(i + 1, num_max, len + 1, condition);
	result[len] = 0;
}

각 인덱스의 값들을 채워나가면서 다음 함수에서는 전 인덱스의 숫자보다 높게 뽑게끔 다음 재귀함수는 for문이 현재 뽑은 값보다 1증가한 값부터 채울 수 있게 하였습니다.

풀이

첫번째 풀이

#include<iostream>
using namespace std;

int result[9];

void recursion(int prev_num, int num_max, int len, int condition)
{
	if (len == condition)
	{
		for (int i = 0;i < len;i++)
		{
			cout << result[i] << ' ';
		}
		cout << '\n';
		return;
	}


	for (int i = prev_num;i <= num_max;i++)
	{
		result[len] = i;
		recursion(i + 1, num_max, len + 1, condition);
		result[len] = 0;
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N, M = 0;
	cin >> N >> M;

	recursion(1, N, 0, M);

	return 0;
}
profile
게임프로그래머 지망!

0개의 댓글