상세 컨텐츠

본문 제목

BabyGin - Count Sort

C 언어

by ChrisMare 2018. 1. 4. 09:24

본문

BabyGin 이란?


-  (0~9)사이의 수 중 6가지 수를 입력하여 순차적으로(예를들어 0,1,2 - 1,2,3 - 2,3,4 - 3,4,5 - 4,5,6 - 5,6,7 -     6,7,8 - 7,8,9 ) 입력되면

   Run

   (0~9)사이의 수 중 6가지 수를 입력하여 연속된 수가 3개 일 때 Triple

   Run + Triple의 수가 2 이상일 때 BabyGin

   아니면 Lose 형태의 프로그램입니다.


여기서 저의 방법은 0~9사이의 수를 체크하는 경우라는 것을 보고

카운트 소트(Count Sort)를 적용하게 됐습니다.


* Count Sort

array[10]를 잡아서 ex) 123666입력 시


 0

1 

2 

3 

4 

5 

6 

7 

8 

0 

1 

1 

1 

0 

0 

3 

0 

0 


의 값을 저장하게 되고 여기서 값을 뽑아서 triple와 run을 조건을 가지고 비교해서 체크를 한 후 문제를 해결 하면 됩니다.!!!


#include <stdio.h>

#include <stdlib.h>


void main() {

int count[10] = { 0 };

int num[6] = { 0 }; 

int tri = 0;

int run = 0;


for (int i = 0; i < 6; i++) {

printf("%d.number input : ", i + 1);

scanf("%d", num + i);

while (num[i] < 0 || num[i] > 9) {

printf("input number ERR - write again : ");

scanf("%d", num + i);

}

count[*(num + i)]++;

}


for (int i = 0; i < 10; i++) {

if (count[i] == 6) {

tri += 2;

count[i] -= 6;

}

else if (count[i] >= 3 && count[i] < 6) {

tri++;

count[i] -= 3;

}

}

for (int i = 0; i < 8; i++) {


if (count[i] + count[i + 1] + count[i + 2] >= 3 && count[i] + count[i + 1] + count[i + 2] < 6) {

count[i] --; count[i + 1] --; count[i + 2] --;

run++;

}

else if (count[i] + count[i + 1] + count[i + 2] == 6) {

count[i] -= 2; count[i + 1] -= 2; count[i + 2] -= 2;

run += 2;

}


}

printf("┌──────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬──────────┐\n│ ");

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 10; j++) {

if (i == 0) {

printf(" count[%d] ", j);

if (j == 9) {

printf("│\n", count[j]);

printf("├──────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬──────────┤\n│");

}

}

else {

if (j >= 1&&j<9) {

printf("    %d    │", count[j]);

}else 

printf("     %d    │", count[j]);

}

}

}

puts("");

printf("└──────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴──────────┘\n");


if (tri + run == 2) {

printf("\ntri = %d\t run = %d\n", tri, run);

printf("tri+run = %d ∴ Baby-Gin\n", tri + run);

}

else {

printf("tri+run = %d ∴ Lose\n", tri, run, tri + run);

exit(-1);

}

}

관련글 더보기

댓글 영역