반응형
Baby Gin은 카드로 게임을 한다.
각 카드는 0 에서 9 까지의 수가 쓰여져 있다.
게이머는 6 장의 카드를 받는다.
받는 사람이 Baby Gin을 가진다면 이 게이머가 이기고 아니면 진다.
Baby Gin을 가지기 위해서는 모든 6장의 카드가
런(runs)이거나, 트리플리트(tripletes) 이여야 한다.
• 런이라는 말은 3장의 카드가 연속적인 번호를 말한다.
ex. 345 혹은 789 .., 단, 901 은 런이아니다.
• 트리플리트는 같은 번호를 가지는 세장의 카드를 말한다.
ex. 000 혹은 444, ...
몇 가지 예를 보면,
• 667767 은 Baby Gin이다. 두 개의 트리플리트(666, 777)
• 054060 은 Baby Gin이다. 하나의 런과 하나의 트리플리트
• 101123 은 Baby Gin이 아니다.
6 개의 숫자를 입력으로 받아
Baby Gin 인지 아닌지를 판별하는 프로그램을 작성하는것이 일이다.
<입력>
0 에서 9 사이의 6 개의 숫자가 입력으로 주어진다.
<출력>
Baby Gin 이면 gin, 아니면 lose를 출력한다.
<입출력 예>
입력 : 6 6 7 7 6 7
출력 : gin
입력 : 0 5 4 0 6 0
출력 : gin
입력 : 1 0 1 1 2 3
출력 lose
입력 : 2 2 1 1 0 0
출력 : gin
Program Counting Sort를 이용한 Baby Gin구현
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | /* Thursday, January 4, 2018 DAY 07 : Homework (Baby Gin) */ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void InputNum(int *p); void BabyGin(int data[], int *runsCount, int *triCount); void Output(int *runsCount, int *triCount); int main(void) { int data[6]; int runsCount = 0; int triCount = 0; InputNum(data); BabyGin(data, &runsCount, &triCount); Output(&runsCount, &triCount); return 0; } void InputNum(int *data) { int i; printf("Input data : "); for (i = 0; i < 6; i++) { scanf("%d", &data[i]); if (data[i] < 0 || data[i] > 9) { puts("You entered wrong data!"); exit(-1); } } } void BabyGin(int data[], int *runsCount, int *triCount) { int NumCntArr[10] = { 0 }; int ActionCount = 0; int i; while (ActionCount != 6) { switch (*(data + ActionCount)) { case 0: NumCntArr[0]++; ActionCount++; continue; case 1: NumCntArr[1]++; ActionCount++; continue; case 2: NumCntArr[2]++; ActionCount++; continue; case 3: NumCntArr[3]++; ActionCount++; continue; case 4: NumCntArr[4]++; ActionCount++; continue; case 5: NumCntArr[5]++; ActionCount++; continue; case 6: NumCntArr[6]++; ActionCount++; continue; case 7: NumCntArr[7]++; ActionCount++; continue; case 8: NumCntArr[8]++; ActionCount++; continue; case 9: NumCntArr[9]++; ActionCount++; continue; } } for (i = 0; i < 10; i++) { if (NumCntArr[i] == 3) { *runsCount += 1; NumCntArr[i] = 0; } } for (i = 1; i < 9; i++) { if (NumCntArr[i - 1] == 2 && NumCntArr[i] == 2 && NumCntArr[i + 1] == 2) { *triCount += 2; NumCntArr[i - 1] = 0; NumCntArr[i] = 0; NumCntArr[i + 1] = 0; } else if (NumCntArr[i - 1] == 1 && NumCntArr[i] == 1 && NumCntArr[i + 1] == 1) { *triCount += 1; NumCntArr[i - 1] = 0; NumCntArr[i] = 0; NumCntArr[i + 1] = 0; } } } void Output(int *runsCount, int *triCount) { if (*runsCount + *triCount == 2) puts("Baby Gin!"); else puts("Failed!"); } | cs |
반응형