Algorithm/back_tracking

백준 6603 로또 c++ // kC6 구현하기

Mini_96 2023. 10. 3. 02:00

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

1. 풀이

인덱스를 arr에 저장하고

그 인덱스를 이용해 a(실제값)에 접근하면 된다.

- start 사용 => 조합

- isused사용 => 중복조합아님

 

2. 전체코드

#include <bits/stdc++.h>
using namespace std;

int n,k;
int a[15], isused[15], arr[15];

//현재 q개뽑았음
void go(int q) {
	if (q == 6) {
		for (int i = 0; i < 6; ++i) {
			cout << a[arr[i]] << " ";
		}
		cout << "\n";
		return;
	}

	int st = 0;
	if (q != 0) st = arr[q - 1];

	for (int i = st; i < k; ++i) {
		if (isused[i]) continue;
		arr[q] = i;
		isused[i] = 1;
		go(q + 1);
		isused[i] = 0;
	}

}

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

	while (true) {
		cin >> k;
		if (k == 0) break;

		// k C 6 구현
		for (int i = 0; i < k; ++i) {
			cin >> a[i];
		}

		go(0);

		cout << "\n";

	}
	
}