BOJ | 15654 N과 M(5)

133210·2021년 8월 12일
0

알고리즘 스터디

목록 보기
8/16
post-thumbnail

BOJ 15654

| Problem

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.

N개의 자연수 중에서 M개를 고른 수열

입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.


N개의 숫자를 직접 입력 받음
이후 정렬해주기
그 외에는 N과 M(1)과 동일하게 진행하면 될 것 같음.

| Code

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool check[8];
int n, m;
int a[8];
vector<int> seq;

void func(int size) {
	if (size == m)
	{
		for (int i : seq)
			printf("%d ", i);
		printf("\n");
		return;
	}
	for (int i = 0; i < n; i++)
	{
		if (!check[i]) {
			check[i] = true;
			seq.push_back(a[i]);
			func(size + 1);
			seq.pop_back();
			check[i] = false;
		}
	}
}

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	sort(a, a + n);
	func(0);
	return 0;
}

| Result

0개의 댓글