Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Plog

Baby Gin - 완전탐색 본문

Algorithm

Baby Gin - 완전탐색

풍중현 2020. 3. 25. 10:00

베이비 진은 0~9 사이의 숫자 중에 중복 가능한 6개의 숫자를 뽑아서 세개의 연속된 숫자 혹은 세개의 똑같은 숫자로만 구성될 수  있을 경우를 맞춰야 한다. 예를 들어 461511은 111과 456으로 1개의 런(3개의 숫자가 연달아 나타날 경우) 1개의 트리플럿(3개의 숫자가 똑같을 경우)이므로 베이비 진이며, 351233은 트리플럿 333을 만들 수 있으나 남은 512는 런도 트리플럿도 아니기 때문에 베이비 진이 아니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef enum 
{
    false,
    true,
} bool;

bool exist(int arr[], int size, int value) 
{
    for(int i = 0; i < 6; i++) {
        if(arr[i] == value) return true;
    }
    return false;
}

// 0~9 사이의 난수 생성
int* create_cards(int* arr) {

    int tmp = -1;

    printf("created cards: ");
    for(int i=0;i<6;i++) 
    {
        tmp = rand() % 10;
        
        arr[i] = tmp;
    }
    printf("\n");

    return arr;
}

// 런인지 판별
bool is_run(int* arr) {
    if(arr[0] == arr[1]-1 && arr[0] == arr[2]-2) return true;
    return false;
}

// 트리플렛인지 판별
bool is_triplete(int* arr) {
    if(arr[0] == arr[1] && arr[1] == arr[2]) return true;
    return false;
}

bool is_baby_gin(int* arr) {
    bool check_front = false;
    bool check_back = false;
    int front[3];
    int back[3];
    

    // 모든 경우의 순열 탐색 (완전 검색)
    for(int i1=0;i1<6;i1++) {
        for(int i2=0;i2<6;i2++) {
            if(i2 != i1) {
                for(int i3=0; i3<6;i3++) {
                    if(i3 != i2 && i3 != i1) {
                        for(int i4=0;i4<6;i4++) {
                            if(i4 != i3 && i4 != i2 && i4 != i1) {
                                for(int i5=0;i5<6;i5++) {
                                    if(i5 != i4 && i5 != i3 && i5 != i2 && i5 != i1) {
                                        for(int i6=0;i6<6;i6++) {
                                            if(i6 != i5 && i6 != i4 && i6 != i3 && i6 != i2 && i6 != i1) {
                                                front[0] = arr[i1];
                                                front[1] = arr[i2];
                                                front[2] = arr[i3];
                                                back[0] = arr[i4];
                                                back[1] = arr[i5];
                                                back[2] = arr[i6];
                                                    if(is_run(front) == true || is_triplete(front) == true) {
                                                        if(is_run(back) == true || is_triplete(back) == true) return true;
                                                    } 
                                                }
                                            }
                                        }
                                    } 
                                }
                            }
                        }
                    }
                }
            }
        }
    return false;
}

void print_array(int* arr) {
    for(int i=0;i<6;i++) {
        printf("%d ", arr[i]);
    }
}

int main(int argc, char** argv) 
{
    srand(time(NULL));

    for(int i=0;i<100;i++) {
        int* arr = (int*)malloc(sizeof(int) * 6);

        create_cards(arr);

        if(is_baby_gin(arr)) 
        {
            print_array(arr);
            printf(" O!\n");
        }
        else 
        {
            print_array(arr);
            printf(" X\n");
        }
        free(arr);
    }

    return 0;
}

 

결과

created cards:
5 1 8 0 3 1  X
created cards:
5 4 7 8 6 3  O! 베이비 진! 345678로 가능
created cards:
5 7 6 7 5 9  X
created cards:
6 5 2 9 6 2  X
created cards:
1 0 1 8 7 0  X
created cards:
4 5 2 1 3 6  O! 베이비 진! 123456로 가능
created cards:
1 3 3 6 2 7  X
created cards:
5 9 2 0 3 6  X
created cards:
4 5 6 9 2 5  X
created cards:
4 8 9 2 5 4  X
created cards:
9 6 8 9 1 1  X
created cards:
8 8 5 0 6 9  X
created cards:
2 2 8 9 3 2  X
created cards:
3 7 9 4 6 2  X
created cards:
4 2 6 0 5 6  X
created cards:
7 1 6 5 1 7  X

'Algorithm' 카테고리의 다른 글

백준 - 1002 터렛  (0) 2020.03.27
[SAMSUNG SW Expert Academy] 1208 - Flatten  (0) 2020.03.25
[SAMSUNG SW Expert Academy] 1206 - View  (0) 2020.03.25
Baby Gin - 그리디  (0) 2020.03.25