C#

[C#]특정 범위의 랜덤 값 생성하는 방법

DevStory 2022. 8. 31.

특정 범위의 랜덤 값 생성하는 방법

이번 포스팅은 C#에서 특정 범위의 랜덤 값을 생성할 수 있는 몇 가지 방법을 소개합니다.


방법 1. 특정 범위의 랜덤 값 생성

특정 범위의 랜덤 값을 생성하기 위해 Random 클래스의 next() 메서드를 사용합니다.

public virtual int Next(int minValue, int maxValue)

Next() 메서드는 최소값(minValue), 최대값(maxValue) 사이의 값을 반환합니다.

 

최소값이 0이며, 최대값이 10인 경우 0 이상 10 미만인 정수를 반환합니다.

 

다음 예제는 0 이상 10 미만인 랜덤 값을 콘솔에 5번 출력합니다.

class Program
{
  static void Main(string[] args)
  {
    Random rand = new Random();

    for(int loop = 0; loop < 5; loop++)
    {
      Console.WriteLine("0 ~ 10 사이의 랜덤 값: " + rand.Next(0, 10));
    }
  }
}

[실행 결과]

0 ~ 10 사이의 랜덤 값: 8
0 ~ 10 사이의 랜덤 값: 2
0 ~ 10 사이의 랜덤 값: 6
0 ~ 10 사이의 랜덤 값: 9
0 ~ 10 사이의 랜덤 값: 6

Next() 메서드에 전달되는 최소값은 최대값보다 클 수 없습니다. 만약, 최소값이 최대값보다 큰 경우 ArgumentOutOfRangeException이 발생합니다.

class Program
{
  static void Main(string[] args)
  {
    Random rand = new Random();

    Console.WriteLine("20 ~ 10 사이의 랜덤 값: " + rand.Next(20, 10));
  }
}

[에러 내용]


방법 2. 특정 범위의 랜덤 값 여러 개 생성

C#에는 특정 범위의 랜덤 값을 여러 개 생성하는 메서드가 존재하지 않습니다. 따라서, 특정 범위의 랜덤 값을 여러 개 생성하는 소스 코드를 개발자가 직접 구현해야 합니다.

 

[구현 방법]

순서 1. int 타입의 배열 또는 List를 반환하며, 최소값(min), 최대값(max), 개수(count)를 매개변수로 가지는 메서드를 정의합니다.

순서 2. 개수(count)의 크기를 가지는 배열 또는 List를 선언합니다.

순서 3. 개수(count)만큼 실행되는 반복문을 구현하며, 배열에 랜덤 값을 추가합니다.

순서 4. 배열 또는 List를 반환합니다.

 

다음 예제는 100 이상 200 미만인 10개의 랜덤 값을 생성합니다.

class Program
{
  public static int[] generatorRandomNumber(int min, int max, int count)
  {
    int[] intArray = new int[count];
    Random rand = new Random();

    for(int loop = 0; loop < count; loop++)
    {
      intArray[loop] = rand.Next(min, max);
    }

    return intArray;
  }

  static void Main(string[] args)
  {
    int[] intArray = generatorRandomNumber(100, 200, 10);

    Console.WriteLine("intArray: [" + string.Join(", ", intArray) + "]");
  }
}

[실행 결과]

intArray: [126, 135, 176, 165, 179, 187, 170, 186, 123, 161]

방법 3. 특정 범위의 랜덤 값에서 중복 제거

특정 범위의 랜덤 값을 여러 개 생성하면 중복되는 값이 존재할 수 있습니다.

 

중복되는 값을 제거하고 싶다면, LINQ에서 제공하는 Contains() 메서드를 사용하여 랜덤 값 존재여부를 확인합니다. 랜덤 값이 배열에 존재하지 않으면 랜덤 값을 배열에 추가합니다.

 

먼저, LINQ에서 제공하는 Contains() 메서드를 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

다음 예제는 100 이상 200 미만의 중복되지 않는 10개의 랜덤 값을 생성합니다.

class Program
{
  public static int[] generatorRandomNumber(int min, int max, int count)
  {
    int[] intArray = new int[count];
    Random rand = new Random();

    for(int loop = 0; loop < count; loop++)
    {
      // 랜덤 값 생성
      int randNumber = rand.Next(min, max);

      // 랜덤 값이 배열에 존재하면 loop를 1 감소
      if (intArray.Contains(randNumber))
      {
        loop--;
      } 
      // 랜덤 값이 배열에 없으면 배열에 추가
      else
      {
        intArray[loop] = randNumber;
      }
    }
    return intArray;
  }
  
  static void Main(string[] args)
  {
    int[] intArray = generatorRandomNumber(100, 200, 10);

    Console.WriteLine("intArray: [" + string.Join(", ", intArray) + "]");
  }
}

[실행 결과]

intArray: [127, 144, 136, 132, 128, 155, 172, 184, 104, 114]
반응형

댓글