말랑말랑제리스타일

C 언어에서 rand 함수를 사용할 때 srand를 사용하는 이유 본문

프로그래밍/백준 알고리즘

C 언어에서 rand 함수를 사용할 때 srand를 사용하는 이유

제리제리 2023. 6. 13. 11:37

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 함수입니다.

반응형
Comments