6603 로또
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
(1) 일반적 풀이
C++
//
// Created by SangWon Kang on 2020/09/04.
// Copyright © 2020 SangWon Kang. All rights reserved.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pair<int, int>> vpii;
#define INF 987654321
#define endl '\n';
#define FOR(i, n) for(int i=0; i<n; i++)
#define FOR1(i, n) for(int i=1; i<=n; i++)
#define MAX 13
int s[MAX], k;
vi v;
void solve(int num) {
// 로또의 길이만큼 뽑으면 출력
if (v.size() == 6) {
FOR(i, 6) cout << v[i] << ' ';
cout << endl;
return;
}
for (int i = num; i < k; i++) {
// 백준 15650 문제와 유사하다.
v.push_back(s[i]);
solve(i + 1);
v.pop_back();
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while (1) {
cin >> k;
if (!k) break;
FOR(i, k) cin >> s[i];
solve(0);
cout << endl;
}
return 0;
}
백준 15650 문제의 풀이와 유사하다.
[C++] 백준 15650 N과 M (2)
15650 N과 M (2) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순�
kevink1113.tistory.com
(2)-1 next_permutation을 이용한 간단한 풀이
C++
//
// Created by SangWon Kang on 2020/09/04.
// Copyright © 2020 SangWon Kang. All rights reserved.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pair<int, int>> vpii;
#define INF 987654321
#define endl '\n';
#define FOR(i, n) for(int i=0; i<n; i++)
#define FOR1(i, n) for(int i=1; i<=n; i++)
int k;
vi num(13);
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while (true) {
cin >> k;
if (!k) break;
FOR(i, k) cin >> num[i];
// S: 고를 순열 bool형 결정
vector<bool> S(k, true);
FOR(i, 6) S[i] = false;
do {
FOR(i, k) if (!S[i]) cout << num[i] << " ";
cout << endl;
} while (next_permutation(S.begin(), S.end()));
cout << endl;
}
return 0;
}
(2)-2 prev_permutation을 이용한 간단한 풀이
C++
//
// Created by SangWon Kang on 2020/09/04.
// Copyright © 2020 SangWon Kang. All rights reserved.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pair<int, int>> vpii;
#define INF 987654321
#define endl '\n';
#define FOR(i, n) for(int i=0; i<n; i++)
#define FOR1(i, n) for(int i=1; i<=n; i++)
int k;
vi num(13);
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while (1) {
cin >> k;
if (!k) break;
FOR(i, k) cin >> num[i];
// S: 고를 순열 bool형 결정
vector<bool> S(k, false);
FOR(i, 6) S[i] = true;
do {
FOR(i, k) if (S[i]) cout << num[i] << ' ';
cout << endl;
} while (prev_permutation(S.begin(), S.end()));
cout << endl;
}
return 0;
}
'Algorithm > BOJ (백준)' 카테고리의 다른 글
[C++] 백준 2042 구간 합 구하기 (1) | 2024.11.12 |
---|---|
[C] 백준 2268 수들의 합 7 (0) | 2024.11.06 |
[C++] 백준 15650 N과 M (2) (1) | 2020.09.04 |
[C/C++] 백준 11092 Safe Passage (3) | 2020.07.27 |
[C/C++] 백준 14501 퇴사 (0) | 2020.07.27 |