Plog
Baby Gin - 완전탐색 본문
베이비 진은 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 |