0 부터 10까지의 숫자중에 랜덤으로 a개를 뽑을려고합니다.
근데 0을 뽑으면 0을 제외한 나머지 숫자를 뽑아야하는데
while문쓰는건 좀 바보같은 짓인거 같아서 다른방법이 있나하여 질문합니다.
public int[] RandomNumber(int 전체수, int 뽑을수)
{
bool[] 전체수집합 = new bool[전체수];
int[] 정답지 = new int[뽑을수];
for (int i = 0; i < 뽑을수; i++)
{
int 사고방지 = 전체수 * 100;
int 반복 = 0;
bool 뽑힌수존재유무 = false;
while (반복 < 사고방지)
{
int 뽑힌수 = Random.Range(0, 전체수);
if (전체수집합[뽑힌수] == false)
{
전체수집합[뽑힌수] = true;
정답지[i] = 뽑힌수;
뽑힌수존재유무 = true;
break;
}
else
{
반복++;
}
}
if (!뽑힌수존재유무)
{
//에러났어염
}
}
return 정답지;
}
좋은방법 있으면 알려주세요 감사합니다
해당 댓글은 삭제되었습니다.
전 저기서 while문 없이 for 문 한번만 돌고싶어요
뽑은 수를 저장할 배열 뽑을때 배열에있다면다시뽑
그게 이거 아닌가요??
1. List에 뽑을 수 다 넣어놓음 2. 랜덤으로 하나 골라서 뽑고 리스트에서 삭제. 3. List에 남은게 0개가 될때까지 반복
배열에 숫자 다 집어넣고 랜덤으로 [0, n)범위로 인덱스를 하나 뽑은 다음 n-1와 스왑. 다음은 [0, n-1), n-2, ... 이렇게 하면 안되나 - dc App
리스트에 배열 넣고 숫자 하나 뽑을 때마다 리스트에서 숫자 삭제하는게 제일 깔끔할거 같은데
Fisher-Yates 알고리즘