강의로 돌아가기
spdragonjay

srand

srandtime 몇번째 강의에서 배우나요?

1 개의 답변
나도코딩

안녕하세요, 나도코딩입니다.

 

영상 편집 과정에서 srand 에 대한 설명이 누락되어 보충 설명을 드립니다. 학습하시는데 불편을 드려 대단히 죄송합니다.

 

컴퓨터 프로그램에서 아주 많이 쓰이는 것 중 하나가 '랜덤' 수 입니다. 친구에게 점심 뭐 먹을까? 라고 물어보면 아무거나 좋아 라고 대답을 할 수 있듯이, 컴퓨터에게 아무거나 숫자 하나 골라봐 라고 시키기 위해서 사용되는데요, C 프로그램에서는 맨 위에 #include 라고 명시하여 time.h 에 있는 내용을 가져다 쓰겠다고 알려줍니다. (개발 환경에 따라 다를 수 있는데, time.h 만 추가해서 되지 않으시는 분은 #include 도 함께 추가해 주세요) 그리고 나서는 rand() 라는 함수를 이용해서 난수(random) 를 뽑을 수 있습니다.

 

사용하는 방법은 

int num = rand() % 어떤 수;

입니다.

 

어떤 수의 역할은, 내가 뽑고 싶은 숫자의 범위를 지정하는 거에요. 예를 들어서 가위, 바위, 보 게임을 하기 위해서는 3가지 경우밖에 없으므로 컴퓨터에게 3개 중에 아무거나 골라줘, 가위는 1, 바위는 2, 보는 3으로 표시해줘 이렇게 할 수 있겠죠? 그러기 위해서는 rand() % 3 으로 하면 됩니다. 그러면 컴퓨터는 3개의 경우의 수 중에서 아무 수나 뽑습니다. 단, 여기서 시작하는 수는 1이 아니라 0입니다. 즉 rand() % 3 이라고 하면, 0 ~ 2 사이의 숫자 중에서 아무거나 뽑게 되지요. 그래서 우리가 원하는 1 ~ 3 사이의 숫자를 뽑으려면, rand() % 3 + 1 이렇게 뒤에 1을 더해주면 됩니다. 그러면 0 ~ 2 사이의 숫자를 아무거나 뽑고, 거기에 1을 더하게 되므로 1 ~ 3 의 숫자가 나오게 되는 것이지요.

 

여기에 한 가지 중요한 부분이 있습니다. 바로 난수를 '초기화' 해야 하는 건데요, 이를 해주지 않으면 이게 진짜 난수가 맞나..? 라고 하시게 될 거에요. 난수 초기화는 rand() 함수를 호출하기 이전에 어느 위치에서건 srand(time(NULL)); 이라는 문장을 한 번만 써주시면 됩니다.

 

아래는 예제 코드입니다.

 

include

include

int main(void)

{

printf(\n\n난수 초기화 이전..\n\n);

for(int i=0; i<10; i++)

printf(%d, rand()%10);

srand(time(NULL));

printf(\n\n난수 초기화 이후..\n\n);

for (int i = 0; i<10; i++)

printf(%d, rand() % 10);

 

return 0;

}

 

출력 결과는 아래와 같습니다.

 

(1회차)

난수 초기화 이전..

1 7 4 0 9 4 8 8 2 4

 

난수 초기화 이후..

6 6 1 1 1 8 6 3 0 9

 

(2회차)

난수 초기화 이전..

1 7 4 0 9 4 8 8 2 4

 

난수 초기화 이후..

7 0 8 5 7 3 1 5 3 3

  

결과값을 보면 아시겠지만 1회차 2회차 모두 난수 초기화 이전에는 동일한 패턴의 값이 출력되는 것을 볼 수 있습니다. 이후에 여러 번 수행해도 초기화 이전에는 모두 값이 동일하군요! srand 를 통해 난수 초기화를 하면 제대로 된 난수를 얻으실 수 있습니다. 절대 잊지 마세요!

 

영상에 설명이 누락된 점 다시 한번 사과드리며, 답변으로 설명드린 내용에 질문이 생기시면 언제든 문의 남겨주세요.

감사합니다 ^

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.