HyeLog
백준_6603_로또 본문
문제: https://www.acmicpc.net/problem/6603
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
알고리즘: 브루트포스 - 재귀
추가로 알게된 사실: 함수의 매개변수로 vector를 넘겨줄 시 & 붙이는게 안전함.
코드:
#include <iostream>
#include <vector>
using namespace std;
vector<int> six;
void solve(vector<int> &s, int index, int cnt) { // index: 선택할지 말아야할지 결정해야하는 인덱스 / cnt: 현재까지 선택한 개수
// 정답을 찾은 경우
if (cnt == 6) {
for (int i = 0; i < 6; i++) {
cout << six[i] << ' ';
}
cout << '\n';
return;
}
// 불가능한 경우
if (index == s.size()) return;
// 다음 호출
six.push_back(s[index]);
solve(s, index + 1, cnt + 1);
six.pop_back();
solve(s, index + 1, cnt);
}
int main() {
while (1) {
int k;
cin >> k;
if (k == 0) break;
vector<int> s(k); // 사이즈 미리 안정하고 인덱스 접근시 에러 발생
for (int i = 0; i < k; i++) {
cin >> s[i];
}
solve(s, 0, 0);
cout << '\n';
}
return 0;
}
'알고리즘' 카테고리의 다른 글
백준_14225_부분수열의 합(ver2) (0) | 2022.04.14 |
---|---|
백준_1182_부분수열의 합 (0) | 2022.04.14 |
백준_15662_톱니바퀴2 (0) | 2022.03.14 |
백준_16967_배열 복원하기 (0) | 2022.02.21 |
백준_16931_겉넓이 구하기 (0) | 2022.02.21 |