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 + ", ");
}
}
}

반응형