C언어 공부

[C] time, rand, srand 함수

Client Side 2026. 1. 22. 22:49

1. 세 함수의 역할과 관계

 

컴퓨터는 진정한 의미의 우연을 만들지 못한다. 미리 정해진 복잡한 수열(의사 난수)에서 숫자를 하나씩 꺼내올 뿐이다.

 

 

  • rand(): 미리 생성된 난수 목록에서 다음 숫자를 하나 꺼내오는 함수입니다. (0 ~ 32767 사이의 값 반환)
  • srand(seed): 난수 목록을 생성하기 위한 '기준점(Seed)'을 설정하는 함수입니다. 똑같은 Seed를 넣으면 항상 똑같은 난수 순서가 나옵니다.
  • time(NULL): 현재 시간을 초 단위 정수(Unix Time)로 반환합니다. 매초 값이 변하기 때문에 가장 대중적인 Seed 값으로 사용됩니다.

 

2. 왜 srand(time(NULL))을 같이 쓰는가?

만약 srand를 쓰지 않고 rand()만 호출하면, 프로그램을 껐다 켤 때마다 항상 같은 순서로 숫자가 나옵니다. (기본 Seed가 1로 고정되기 때문)

  • 게임에서의 문제점: 몬스터가 드랍하는 아이템이 매번 똑같거나, 강화 확률이 실행할 때마다 고정되는 치명적인 버그가 발생합니다.
  • 해결: srand((unsigned int)time(NULL));을 프로그램 시작 시 단 한 번 호출하여, 실행할 때마다 Seed를 시간값으로 바꿔줘야 합니다.

 

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>


using namespace std;

int main()
{

	srand((unsigned int)time(NULL));
	
	for (int i = 0; i < 5; ++i)
	{
		int randomValue = rand() % 100;
		cout << i + 1 << "번째 수 : " << randomValue << endl;
	}

	return 0;
}