본문 바로가기
[백준]

[BaekJoon/백준] 15650번

by Hevton 2020. 12. 5.
반응형

이번엔 순열과 조합에서

조합문제다. 이전 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