C# 코드로 카드 섞기

안또니오·2022년 10월 11일
0

일반적으로 카드 덱을 섞은 방법을 힌두셔플이라고 한다고 들었다.

그를 코드로 작성해보았다.

힌두 셔플의 원리는 다음과 같은데,

덱의 아래에서 n장을 덜어서 위로 올린다.
그 올린 n장 중 m(m<n)장을 덜어서 위로 올린다.
카드가 없을 때까지 반복한다.

point는 손에 잡은 카드의 총 양을 얘기하는데,
처음엔 52장 중에서 s1만큼 덜어서 위로 올리면,
두번째 과정에선 s1 중에서 s2 만큼 덜게되기 때문에 재귀방식을 이용했다.

void HinduShuffle(List<string> deck, int point)
        {
            Random random = new Random();
            int s = random.Next(0, point);
            if (s == 0) return;
            List<string> tmpDeck = deck.ToList();
            for(int i = 0; i<point; i++)
            {
                int less = point - s;
                if (less + i  < point)
                {
                    deck[i] = tmpDeck[less + i];
                }
                else
                {
                    deck[i] = tmpDeck[i - s];
                }
            }
            HinduShuffle(deck, s);
        }
profile
2020. 11월 공부시작.

0개의 댓글