C#

[C#] 난수 생성, 배열 섞기, 리스트 컴프리헨션

J-sean 2025. 12. 30. 14:55
반응형

난수를 만들고 섞어보자.

 

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random(); // 난수 생성기

            // byte 배열 난수 생성
            byte[] bytes = new byte[10];            
            random.NextBytes(bytes);
            foreach (byte b in bytes)
            {
                Console.Write($"{b}, ");
            }
            Console.WriteLine();

            // 난수 섞기
            random.Shuffle<byte>(bytes);
            foreach (byte b in bytes)
            {
                Console.Write($"{b}, ");
            }
            Console.WriteLine();

            // 문자열 리스트 섞기
            List<string> fruits = new List<string> { "사과", "바나나", "딸기", "오렌지", "수박", "멜론", "키위" };
            string[] fruitsArray = fruits.ToArray();
            random.Shuffle<string>(fruitsArray);
            
            foreach (string fruit in fruitsArray)
            {
                Console.Write(fruit + ", ");
            }
            Console.WriteLine();

            // 정수 리스트 생성
            List<int> numbers = Enumerable.Range(1, 10).ToList();
            foreach (int i in numbers)
            {
                Console.Write(i + ", ");
            }
            Console.WriteLine();

            // 정수 배열 섞기
            int[] numbersArray = numbers.ToArray();
            random.Shuffle<int>(numbersArray);
            foreach (int i in numbersArray)
            {
                Console.Write(i + ", ");
            }
            Console.WriteLine();

            // 섞인 정수 배열 일부 선택
            foreach (int i in numbersArray[2..^5]) // '^'는 뒤에서 부터 인덱싱. ^5는 파이썬의 -5와 동일.
            {
                Console.Write(i + ", ");
            }
            Console.WriteLine();

            // 리스트 컴프리헨션 기능
            List<int> squared = (from x in numbers
                                 where x % 2 == 0 // 짝수라는 조건이 필요 없다면 삭제 가능.
                                 select x * x).ToList();
            foreach (int i in squared)
            {
                Console.Write(i + ", ");
            }
            Console.WriteLine();
        }
    }
}

 

 

정답(2)을 포함하는 선택지를 만들어 보자.

 

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random(); // 난수 생성기

            // 1~10 정수 리스트 생성
            List<int> numbers = Enumerable.Range(1, 10).ToList();

            // 특정 숫자(2)를 포함하는 선택지 4개 만들기
            List<int> choices = new List<int>();
            choices.Add(2); // 2는 무조건 포함
            while (choices.Count < 4)
            {
                int i = random.Next(0, numbers.Count);
                if (!choices.Contains(numbers[i]))
                    choices.Add(numbers[i]);
            }

            // 선택지 섞기
            choices = choices.Shuffle<int>().ToList();
            foreach (int i in choices)
            {
                Console.Write(i + ", ");
            }
            Console.WriteLine();
        }
    }
}

 

 

난수 생성기 없이 만들 수도 있다.

 

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<int> numbers = Enumerable.Range(1, 10);
            numbers = numbers.Shuffle();
            // 1~10 정수를 생성하고 섞기

            IEnumerable<int> choices = [2]; // 선택지에 2는 무조건 포함

            foreach (int n in numbers)
            {
                if (!choices.Contains(n))
                    choices = choices.Append(n);

                if (choices.Count() >= 4)
                    break;
            }

            choices = choices.Shuffle();

            foreach (int i in choices)
                Console.Write(i + ", ");
        }
    }
}

 

 

반응형