반응형
이번엔 순열과 조합에서
조합문제다. 이전 15649번에서 처음에 조합으로 알고 잘못 푼 게 여기서 쓰인다.
이전 게시글의 조합 알고리즘보다 코드를 조금 더 다듬었다.
#include <stdio.h>
#include <stdlib.h>
// 조합 문제. 15650번
int *check;
int *b;
int total; //전체에서
int nx; // 몇개뽑을지
void Printt() {
for(int i = 0; i < total; i++) {
if(check[i])
printf("%d ", b[i]);
}
putchar('\n');
}
// n = 이터레이터, count = 뽑은 갯수
void su(int *x, int n, int count) {
if(nx == count) {
Printt();
return;
}
else {
for(int i = n; i < total; i++) {
if(!check[i]) {
check[i] = 1;
su(x, i+1, count + 1);
check[i] = 0;
}
}
}
}
int main() {
scanf("%d %d", &total, &nx);
b = calloc(total, sizeof(int));
check = calloc(total, sizeof(int));
for(int i = 0; i < total; i++) {
b[i] = i + 1;
}
su(b, 0, 0);
free(b);
free(check);
}
2021.03.06 복습
블랙잭 재귀문제와 똑같다.
//블랙잭 문제와 똑같
#include <stdio.h>
int N, M;
int arr[8];
int arr_b[8];
// in 시작, c 갯수
void BlackJack(int in, int c) {
if(c == M) {
for(int i = 0; i < N; i++) {
if(arr_b[i])
printf("%d ", arr[i]);
}
putchar('\n');
return;
}
for(int i = in; i < N; i++) {
if(arr_b[i])
continue;
arr_b[i] = 1;
BlackJack(i + 1, c + 1);
arr_b[i] = 0;
}
}
int main() {
scanf("%d %d", &N, &M);
for(int i = 0; i < N; i++){
arr[i] = i + 1;
}
BlackJack(0, 0);
}
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 15652번 (0) | 2020.12.06 |
---|---|
[BaekJoon/백준] 15651번 (0) | 2020.12.05 |
[BaekJoon/백준] 15649번 (0) | 2020.12.05 |
[BaekJoon/백준] 10814번 (0) | 2020.12.03 |
[BaekJoon/백준] 1181번 & 나중에 다시보기 (1) | 2020.12.03 |