C에서의 랜덤 숫자 생성

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C에서 랜덤 숫자 생성의 흥미로운 세계로 뛰어들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 많은 예제와 설명으로 이 여정을 안내해 드리겠습니다. 그麼, 시작해 보겠습니다!

C - Random Number Generation

랜덤 숫자는 무엇인가요?

코딩을 시작하기 전에 랜덤 숫자가 무엇인지 이해해 보겠습니다. 보드 게임을 하다가 주사위를 굴리는 상황을 생각해 보세요. 얻는 숫자는 예측할 수 없죠? 그것이 프로그래밍에서 랜덤 숫자를 사용하려고 하는 것과 같은 원리입니다.

C에서는 rand() 함수를 사용하여 랜덤 숫자를 생성합니다. 하지만 여기에 재미있는 사실이 있습니다: 이 숫자들은 진짜 랜덤이 아니라 "pseudo-random"입니다. 즉, 랜덤처럼 보이지만 실제로는 determinsitic인 패턴을 따릅니다. 이게 혼란스러울 수 있지만, 우리는 이어가면서 더 깊이 탐구해 보겠습니다.

시작하기

C에서 랜덤 숫자를 사용하려면 특별한 라이브러리인 stdlib.h를 포함해야 합니다. 이 라이브러리는 우리가 사용할 rand() 함수를 포함하고 있습니다. 다음과 같이 포함합니다:

#include <stdio.h>
#include <stdlib.h>

이제 몇 가지 예제를 보겠습니다!

예제 1: 랜덤 숫자 생성

먼저 랜덤 숫자를 생성하는 간단한 프로그램을 작성해 보겠습니다:

#include <stdio.h>
#include <stdlib.h>

int main() {
int random_number = rand();
printf("랜덤 숫자: %d\n", random_number);
return 0;
}

이 프로그램을 실행하면 화면에 랜덤 숫자가 출력됩니다. 하지만 이 프로그램을 여러 번 실행하면 이상한 점을 발견할 수 있습니다 - 매번 같은 숫자가 출력됩니다! 무슨 일이 일어나고 있는 걸까요?

이제 중요한 개념을 알려드리겠습니다: 시드(seed).

시드와 srand() 함수

시드는 우리의 랜덤 숫자 생성의 시작점입니다. 기본적으로 rand() 함수는 프로그램이 실행될 때마다 같은 시드를 사용하므로, 같은 "랜덤" 숫자를 얻습니다.

이를 해결하기 위해 srand() 함수를 사용하여 다른 시드를 설정합니다. 일반적인 방법은 현재 시간을 시드로 사용하는 것입니다. 매초마다 시간이 바뀌므로, 이를 사용하면 됩니다. 다음과 같이 합니다:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));  // 시드 설정
int random_number = rand();
printf("랜덤 숫자: %d\n", random_number);
return 0;
}

이제 이 프로그램을 실행하면 매번 다른 랜덤 숫자가 출력됩니다!

예제 2: 특정 범위 내의 숫자 생성

종종 특정 범위 내의 랜덤 숫자를 원합니다. 예를 들어, 윷을 굴리는 것을 시뮬레이션하려면 어떻게 하면 될까요? 다음과 같이 합니다:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));
int die_roll = (rand() % 6) + 1;
printf("윷을 굴렸습니다: %d\n", die_roll);
return 0;
}

이 예제에서는 모듈러 연산자(%)를 사용하여 범위를 0-5로 제한한 후, 1을 더하여 1-6로 이동합니다. 이는 특정 범위 내의 랜덤 숫자를 생성하는 일반적인 기법입니다.

예제 3: 여러 개의 랜덤 숫자 생성

이제 여러 개의 랜덤 숫자를 생성하는 프로그램을 작성해 보겠습니다. 윷을 5번 굴리는 시뮬레이션을 만들겠습니다:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(NULL));
printf("윷을 5번 굴립니다:\n");
for (int i = 0; i < 5; i++) {
int roll = (rand() % 6) + 1;
printf("굴림 %d: %d\n", i+1, roll);
}
return 0;
}

이 프로그램은 for 루프를 사용하여 윷을 5번 굴리며, 각 결과를 출력합니다.

srand() 함수의 자세한 설명

srand() 함수에 대해 더 자세히 살펴보겠습니다. 우리가 이미 언급했듯이, 이 함수는 랜덤 숫자 생성의 시드를 설정합니다. 다음 표는 그 사용을 요약합니다:

함수 설명 매개변수 반환 값
srand() 랜덤 숫자 생성의 시드 설정 unsigned int seed None (void)

time(NULL)을 사용하면 현재 시간(1970년 1월 1일부터의 초数)을 반환합니다. 이 값은 매초마다 바뀌므로, 시드로 사용하기에 적합합니다.

srand() 함수는 프로그램의 시작 부분에서 한 번만 호출해야 합니다. 동일한 시드로 여러 번 호출하면 랜덤 숫자 시퀀스가 다시 설정되므로, 원하지 않는 결과를 초래할 수 있습니다.

결론

이제 여러분은 C에서 랜덤 숫자 생성의 기본을 배웠습니다. 우리는 rand() 함수, 시드 설정의 중요성, 그리고 특정 범위 내의 숫자 생성 방법을 배웠습니다.

랜덤 숫자는 게임, 시뮬레이션, 암호학 등 다양한 분야에서 매우 유용합니다. 프로그래밍 여정을 계속하면서, 여러분이 배운 것을 많이 사용할 기회를 발견할 것입니다.

계속 연습하고, 코딩을 계속하세요! 그리고 가장 중요한 것은 즐겁게 하세요!도대체 여러분은 다음 큰 비디오 게임이나 혁신적인 과학 시뮬레이션을 만들기 위해 이 기술을 사용할지도 모릅니다. 가능성은 무한합니다! 랜덤 숫자를 생성할 수 있는 여러분의 능력이 무궁무진합니다!

Credits: Image by storyset