본문 바로가기
코딩테스트 준비/자료구조 & 알고리즘

C# - Random 클래스( +) 반복문 안에서와 밖에서의 차이 )

by 코딩하는 돼징 2023. 7. 4.
반응형

Random 클래스

난수를 생성하는데 사용되는 클래스


Random 생성자

01 시드 값을 직접 지정하지 않는 경우

Random random = new Random();

 


02 시드 값을 직접 지정 하는 경우

시드 값을 지정하는 경우 동일한 순서의 난수를 생성하면서 동일한 난수 시퀸스가 생성된다.

Random random = new Random(33);

시드(Seed) 값 이란?

컴퓨터는 난수 생성 알고리즘을 사용하여 난수를 사용하는데 난수 생성 알고리즘을 실행하기 위해 사용(시작)되는 값이다. 

만약 시드 값을 지정하지 않고 생성된 경우 시스템 시간을 기반으로 자동으로 시드값이 선택된다.

시드 값을 지정한 경우 동일한 난수 시퀀스가 생성되면서 Next()메서드를 호출하더라도 항상 동일한 순서의 난수가 반환된다.


코드 예시

01 시드값 지정한 경우

Random random = new Random(33);
int num1 = random.Next();
int num2 = random.Next();
Console.WriteLine($"num1 : {num1} , num2 : {num2}");

Random random2 = new Random(33);
int num3 = random2.Next();
int num4 = random2.Next();
Console.WriteLine($"num3 : {num3} , num4 : {num4}");


02 시드값 지정하지 않은 경우

Random random = new Random(33);
int num1 = random.Next();
int num2 = random.Next();
Console.WriteLine($"num1 : {num1} , num2 : {num2}");

Random random2 = new Random();
int num3 = random2.Next();
int num4 = random2.Next();
Console.WriteLine($"num3 : {num3} , num4 : {num4}");


Randon.Next

01 Next()

0이상의 임의의 정수 값을 반환

public virtual int Next ();

02 Next(int maxValue)

0이상 maxValue미만의 정수 값을 반환

public virtual int Next (int maxValue);

03 Next(minValue, maxValue)

minValue이상 maxValue미만의 정수 값을 반환

public virtual int Next (int minValue, int maxValue);

Random.NextDouble

0이상 1미만의 부동 소수점 값을 반환

public virtual double NextDouble ();

Random 객체가 반복문 안에 있는 경우

반복문 안에 있을 경우 Random객체가 반복될때마다 계속 새로 생성된다. 그러므로 반복해서 생성된 Random객체는 현재시간을 기반으로 시드 값을 선택하면서 생성된다. 이에 각 반복에서 생성된 난수 값들이 다른 패턴을 가질 수 있다.

그러므로 보다 난수 값들이 다양성이 높다. 대신 추가적인 오버헤드가 발생할 수 있다.

Random 객체가 반복문 밖에 있는 경우

반복만 밖에서 한 번 생성하고 해당 객체를 반복문 안에서 계속 사용하므로 동일한 난수 시퀀스와 동일한 시드값을 유지할 수 있다. 따라서 반복할때마다 동일한 난수 값들이 반복될 수도 있다. 그러므로 보다 난수 값들의 위에 보다 다양성이 낮을 수 있다. 대신 추가적인 오버헤드가 발생하지 않는다.

 

반응형

댓글