본문 바로가기
알고리즘&자료구조/백트레킹

백준 15657

by do_ng 2024. 3. 17.
#include<iostream>	
#include<algorithm>
using namespace std;

int N, M;
int temp[8];     // 출력용도(N개의 값이 있는 위치를 인덱스로 저장)
int arr[8];      // N개의 값 저장 
bool state[8][8]; // N개의 상태(중복 허용)

void func(int k) {
	if (k == M) {
		for (int i = 0; i < M; i++) {
			cout << arr[temp[i]] << ' ';
		}
		cout << '\n';
		return;
	}

	// N개 수만큼 반복 
	int st = 0;
	if (k > 0) st = temp[k - 1];
	for (int i = st; i < N; i++) {
		if (state[k][i] == 0) {
			temp[k] = i;
			state[k][i] = 1; 
			func(k + 1);
			state[k][i] = 0;
		}
	}
}


int main(void) {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	// 1.입력	
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}	
	sort(arr, arr + N); // 수열은 사전순 정렬이므로 오름차순 정렬
	func(0);
	
	return 0;
}

'알고리즘&자료구조 > 백트레킹' 카테고리의 다른 글

백준 9663  (0) 2024.06.12
백준 15656  (0) 2024.03.15
백준 15655  (0) 2024.03.11
백준 15654  (0) 2024.03.10
백준 15652  (0) 2024.03.08