알고리즘 모음(C++)

백준 15657 - N과 M(8)(C++) 본문

백준

백준 15657 - N과 M(8)(C++)

공대생의 잡다한 사전 2022. 2. 20. 02:10

문제 링크입니다. https://www.acmicpc.net/problem/15657

 

15657번: N과 M (8)

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

www.acmicpc.net

백트래킹을 이용한 문제입니다.

N개의 수가 주어진뒤, 주어진 수를 통해 M개만큼 출력하는 문제입니다.

중복된 수도 출력이 되야하기에, check 배열을 통해서 선택된 수를 확인하면 안되는 문제입니다.

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>

using namespace std;

int N, M;
int num[9];
vector<int> number;

void select_number(int x, int cnt) {
	if (cnt == M) {
		for (int i = 0; i < M; i++) {
			cout << number[i] << " ";
		}
		cout << "\n";
	}
	else {
		for (int i = x; i < N; i++) {
			number.push_back(num[i]);
			select_number(i, cnt + 1);
			number.pop_back();
		}
	}
}

void solve() {
	select_number(0, 0);
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> num[i];
	}
	sort(num, num + N);
	solve();
	return 0;
}

 

 

질문 및 조언 댓글 남겨주세요

'백준' 카테고리의 다른 글

백준 15666 - N과 M(12)(C++)  (0) 2022.02.20
백준 15663 - N과 M(9)(C++)  (0) 2022.02.20
백준 15652 - N과 M(4)(C++)  (0) 2022.02.20
백준 9251 - LCS(C++)  (0) 2022.02.19
백준 11444 - 피보나치 수 6(C++)  (0) 2022.02.19