카드 셔플(섞는것) 시뮬레이션을 코드로 구현해 보았습니다.
트럼프 카드는 (1~10, K,Q,J ) 13*4+2(조커) = 54장입니다.
카드를 섞을때 일반적으로 카드의 아래부분을 끄집어 내어
위로 올린뒤 다시 올린부분의 일정 카드를
다시 끄집어 내어
위로 올리고 올린 카드 중 일부를 다시 끄집어 내는 과정을 반복합니다.
위 사진은 젝스팀트 카드입니다.
0~8 까지의 카드가 있다고 할때 4,5,6,7,8 이 처음 꺼내는 카드라면
// F L
// 012345678
한번 하고 나면 아래와 같은 형태가 되고
// F L
// => 456780123
다시 한번 진행하면 6,7,8 선택되면
// F L
// => 456780123
6,7,8이 앞으로 나가게 되고
// F L// => 678450123
8만선택되어 앞으로 나가게 되면 섞기 종료가 됩니다.
// FL
// => 867450123
// => 867450123
이 과정을 shffle() 메소드로 구현하였습니다.
card shuffle 시뮬레이션
package testProject; public class CardGame1Shuffle { public static void main(String[] args) { char [] card; int cardCount = 54; card = new char[cardCount]; for(int i=0;i<cardCount;i++){ card[i]=(char) ('0'+i); } for(int j=0;j<54;j++){ System.out.print("["+j+"]"); printCard(card); shuffle(card); } } public static void printCard(char [] card) { int i; for(i=0;i<card.length;i++){ System.out.print(card[i]); } System.out.println(); } public static int shuffle(char [] card) { // F L // 012345678 // // F L // => 456780123 // //int shffleCount = int first = getRandomWithEnd(0,card.length-1); int last = card.length-1; for(;;){ shuffleOnce(card, first, last); last = last-first; first = getRandomWithEnd(0,last); if(first==last) break; } return 0; } public static int shuffleOnce(char [] card, int st1, int st2) { char [] cardcp = new char[card.length]; int i,j; for(i=0;i<card.length;i++) { cardcp[i]=card[i]; } for(i=st1,j=0;i<=st2;i++,j++){ card[j] = cardcp[i]; } for(i=0;i<=st1-1;i++){ card[j]=cardcp[i]; j++; } return 0; } // getRandomWithSize(0,3) => (0,1,2) // getRandomWithSize(5,3) => (5,6,7) public static int getRandomWithSize(int start,int size) { return (int)(Math.random()*size)+start; } // getRandomWithEnd(0,2) => (0,1,2) // getRandomWithEnd(5,7) => (5,6,7) public static int getRandomWithEnd(int start,int end) { return (int)(Math.random()*(end-start+1))+start; } }
결과
[0]0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde [1]cdeab\]^_`YZ[TUVWXPQRSJKLMNODEFGHI89:;<=>?@ABC01234567 [2]1234567cdeab\]^_`YZ[TUVWXPQRSJKLMNODEFGHI89:;<=>?@ABC0 [3]C0AB<=>?@1234567cdeab\]^_`YZ[TUVWXPQRSJKLMNODEFGHI89:; [4];C0AB<=>?@1234567cdeab\]^_`YZ[TUVWXPQRSJKLMNODEFGHI89: [5]9:8IHGFb\]^_`YZ[TUVWXPQRSJKLMNODE;C0AB<=>?@1234567cdea [6]a9:8IHGFb\]^_`YZ[TUVWXPQRSJKLMNODE;C0AB<=>?@1234567cde [7]de@1234567c=>?QRSJKLMNODE;C0AB<[TUVWXP`YZa9:8IHGFb\]^_ [8]]^_\:8IHGFb=>?QRSJKLMNODE;C0AB<[TUVWXP`YZa9de@1234567c [9]4567c3UVWXP`YZa9de@12=>?QRSJKLMNODE;C0AB<[T]^_\:8IHGFb [10]Fb8IHG^_\:4567c3UVWXP`YZa9de@12=>?QRSJKLMNODE;C0AB<[T] [11]a9de@12=>?QRSJKLMNODE;C0AB<[T]Fb8IHG^_\:4567c3UVWXP`YZ [12]YZ`3UVWXP\:4567c@12=>?QRSJKLMNODE;C0AB<[T]Fb8IHG^_a9de [13]^_a9deT]Fb8IHG<[YZ`3UVWXP\:4567c@12=>?QRSJKLMNODE;C0AB [14]ABC0DE;NOKLMSJ^_a9deT]Fb8IHG<[YZ`3UVWXP\:4567c@12=>?QR [15]?QR>12=ABC0DE;NOKLMSJ^_a9deT]Fb8IHG<[YZ`3UVWXP\:4567c@ [16]c@:4567XP\?QR>12=ABC0DE;NOKLMSJ^_a9deT]Fb8IHG<[YZ`3UVW [17]HG<[YZ`3UVWXP\?QR>12=ABC0DE;NOKLMSJ^_a9deT]Fb8Ic@:4567 [18]5674deT]Fb8Ic@:^_a9HG<[YZ`3UVWXP\?QR>12=ABC0DE;NOKLMSJ [19]SJOKLMDE;N9HG<[YZ`3UVWXP\?QR>12=ABC0b8Ic@:^_a5674deT]F [20]]FTde412=ABC0b8Ic@:^_a567SJOKLMDE;N9HG<[YZ`3UVWXP\?QR> [21]R>KLMDE;N9HG<[YZ`3UVWXP\?Q67SJOC0b8Ic@:^_a5]FTde412=AB [22]=AB2de41R>KLMDE;N9HG<[YZ`3UVWXP\?Q67SJOC0b8Ic@:^_a5]FT [23]FT5]:^_aOC0b8Ic@67SJ=AB2de41R>KLMDE;N9HG<[YZ`3UVWXP\?Q [24]WXP\?QB2de41R>KLMDE;N9HG<[YZ`3UV7SJ=AFT5]:^_aOC0b8Ic@6 [25]c@6_aOC0b8IWXP\?QB2de41R>KLMDE;N9HG<[YZ`3UV7SJ=AFT5]:^ [26]:^AFT5]9HG<[YZ`3UV7SJ=c@6_aOC0b8IWXP\?QB2de41R>KLMDE;N [27]MDE;NKL2de41R>QB:^AFT5]9HG<[YZ`3UV7SJ=c@6_aOC0b8IWXP\? [28]\?XPWc@6_aOC0b8IMDE;NKL2de41R>QB:^AFT5]9HG<[YZ`3UV7SJ= [29]<[YZ`3UV7SJ=T5]9HGC0b8IMDE;NKL2de41R>QB:^AF\?XPWc@6_aO [30]aO_c@6We41R>QB:^AF\?XPJ=T5]9HGC0b8IMDE;NKL2d<[YZ`3UV7S [31]7S;NKL2d<[YZ`3UVIMDE5]9HGC0b8@6We41R>QB:^AF\?XPJ=TaO_c [32]_cVIMDE5]9HGC0b8@6We41R>QB:^AF\?XPJ=TaOYZ`3U7S;NKL2d<[ [33]<[`3U7S;NKL2d_cVIMDE5]9HGC0b8@6We41R>QB:^AF\?XPJ=TaOYZ [34]YZOaTAF\?XPJ=1R>QB:^<[`3U7S;NKL2d_cVIMDE5]9HGC0b8@6We4 [35]e4W6GC0b8@PJ=1R>QB:^<[`3U7S;NKL2d_cVIMDE5]9HYZOaTAF\?X [36]?XAF\YZOaTMDE5]9He4W6GC0b8@PJ=1R>QB:^<[`3U7S;NKL2d_cVI [37]_cVIdKL2He4W6GC0b8@PJ=1R>QB:^<[`3U7S;N?XAF\YZOaTMDE5]9 [38]5]93U7S;N?XAF\YZOaTMDE_cVIdKL2He4W6GC0b8@PJ=1R>QB:^<[` [39][`0b8@PJ=1R>QB:^<dKL2He4W6GC3U7S;N?XAF\YZOaTMDE_cVI5]9 [40]]9S;N?XAF\YZOaTMDE_cVI5[`0b8@PJ=1R>QB:^<dKL2He4W6GC3U7 [41]U73CGZOaTMDE_cVI5[`0b8@PJ=1R>QB:^<dKL2He4W6]9S;N?XAF\Y [42]F\Y]9S;N?XAL2He4W6ZOaTMDE_cVI5[`0b8@PJ=1R>QB:^<dKU73CG [43][`0b8@PJ=1R>QB:^<dKU73CG\Y]9S;N?XAL2He4W6ZOaTMDE_cVI5F [44]TMDE_cVI5F6ZOaW4AL2He[`0b8@PJ=1R>QB:^<dKU73CG\Y]9S;N?X [45]?X;NdKU73CG\Y]9S@PJ=1R>QB:^<TMDE_cVI5F6ZOaW4AL2He[`0b8 [46][`0b8e2H?X;NdKU73CG\Y]9S@PJ=1R>QB:^<TMDE_cVI5F6ZOaW4AL [47]4ALOaWDE_cVI5F6Z[`0b8e2H?X;NdKU73CG\Y]9S@PJ=1R>QB:^<TM [48]TM>QB:^<73CG\Y]9S@PJ=1R4ALOaWDE_cVI5F6Z[`0b8e2H?X;NdKU [49]KUdX;Ne2H?0b8=1R4ALOaWDE_cVI5F6Z[`TM>QB:^<73CG\Y]9S@PJ [50]3CG\Y]9S@PJQB:^<7I5F6Z[`TM>KUdX;Ne2H?0b8=1R4ALOaWDE_cV [51]cVE_3CG\Y]9S@PJQB:^<7I5F6Z[`TM>KUdX;Ne2H?0b8=1R4ALOaWD [52]LOaWDNe2H?0b8=1R4A;JQB:^<7I5F6Z[`TM>KUdX@PcVE_3CG\Y]9S [53]\Y]9S3CGcVE_F6Z[`TM>KUdX@PLOaWDNe2H?0b8=1R4A;JQB:^<7I5
결과를 보면 효율이 그렇게 좋지 않아서 굉장히 여러번 수행해야 함을 알 수 있습니다
댓글 없음:
댓글 쓰기