Notice
Recent Posts
Recent Comments
Link
말랑말랑제리스타일
C 언어에서 rand 함수를 사용할 때 srand를 사용하는 이유 본문
C언어에서 rand 함수를 사용하는 경우 srand를 같이 사용하는 경우를 볼 수 있습니다. 그 이유는 rand 함수가 동작하는 방식 때문인데요. C언어뿐만 아니라 파이썬 등 대부분의 랜덤 함수에서 이런 방식이 사용됩니다.
C언어에서 srand를 사용하지 않고 rand 함수를 사용하는 경우
반응형
C언어에서 rand 함수를 사용하는 아래 소스를 동작시켜봅시다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 무작위 숫자 5개 생성
for (int i = 0; i < 5; i++) {
int r = rand();
printf("%d ", r);
}
return 0;
}
자 이 소스를 동작시키면 무작위의 5개 숫자가 생성될 겁니다. 그리고 다시 한번 실행해 봅시다.
다시 5개의 숫자가 나오지만 앞서 실행한 결과와 같은 결과가 나옵니다. 여러 번 실행해도 같은 결과를 얻을 수 있을 겁니다.
따라서 완벽한 랜덤이 아니라는 거죠.
C언어에서 rand 함수는 seed라는 값을 가지고 특정 함수를 내부적으로 실행시켜 얻은 값을 돌려줍니다.
즉 seed가 일정할 경우 rand 함수의 결과는 같게 나오는 거고, 프로그램이 실행될 때 seed는 일정한 값을 가진다는 거죠.
srand를 사용해서 seed를 설정하는 경우
반응형
자 그렇기 때문에 srand라는 함수를 사용해서 seed를 개발자가 바꿔줄 수 있습니다.
통상적으로 시간을 seed로 사용해서 계속해서 가변 되는 값이 들어가도록 설정해 주는데요.
상단의 소스를 아래와 같이 바꿔줍시다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 현재 시간을 seed로 설정
srand(time(0));
// 무작위 숫자 5개 생성
for (int i = 0; i < 5; i++) {
int r = rand();
printf("%d ", r);
}
return 0;
}
이번에는 소스를 실행시킬 때마다 서로 다른 5개의 숫자가 나오는 것을 확인할 수 있을 겁니다.
이와 같이 rand 함수를 통해 얻어지는 랜덤 값을 규칙이 없는 완전한 랜덤 한 값으로 만들어주기 위해 seed를 바꿔주는 함수가 바로 srand 함수입니다.
'프로그래밍 > 백준 알고리즘' 카테고리의 다른 글
파이썬으로 백준 1978번 소수 구하기 (0) | 2022.02.17 |
---|---|
백준 1152번 파이썬 한줄로 풀기 (0) | 2022.02.15 |
백준 10818번 파이썬으로 반복문 없이 풀기 (0) | 2022.02.14 |
백준 알고리즘 while문 문제 3개 해설 (0) | 2022.02.11 |
파이썬으로 백준 for문 문제 풀기 2 (0) | 2022.02.11 |
Comments