Unity_사전캠프

[사전캠프 7일차] 반복문 복습, Random 클래스

티백고래 2025. 3. 25. 18:54

1. 오늘 학습 키워드

목표 1. 팩토리얼 계산을 할 수 있는 콘솔 프로그램 만들기

목표 2. 컴퓨터에서 임의로 숫자 하나를 정하고, 해당 숫자를 맞추는 게임 제작

2. 오늘 학습 한 내용을 나만의 언어로 정리하기

2-1. 팩토리얼

팩토리얼. n! 의 형태를 말한다. n부터 1까지의 모든 수를 곱하라는 수식이다.

오늘은 우선 반복문을 이용해 팩토리얼을 계산하는 코드를 만들어 볼 것이다. 일종의 팩토리얼 계산 전용 계산기이다.

 

코드 1

더보기

Console.WriteLine("팩토리얼을 계산할 숫자를 입력해주세요.");
string xs = Console.ReadLine();
int x; //입력한 수를 정수로 형변환할 값을 x로 지정.
bool xb = int.TryParse(xs, out x);  // xs: 입력한 값을 x로 지정.


 for문

 

int fac; //이후 for문 밖에서 결과값을 출력하기 위해, int fac을 미리 지정해둠.
for (fac = 1; x > 0; x--) //초기 fac값을 1로 두고, x는 0초과여야 하며, x를 계속 1씩 감소 시킨다.
{
    fac = fac * x;
}


 while 문

 

int fac = 1; //팩토리얼로 계산될 값을 fac으로 지정. 초기값은 1로 하여 x를 곱했을 때 fac=x가 되도록 함
while (x > 0)
{
    fac = fac * x;
    x--; //곱해주는 수, x가 반복하면서 1씩 감소하도록 명령.
}


do-while문


int fac = 1; //팩토리얼로 계산될 값을 fac으로 지정. 초기값은 1로 하여 x를 곱했을 때 fac=x가 되도록 함
do
{
    fac = fac * x; 
    x--; //곱해주는 수, x가 반복하면서 1씩 감소하도록 명령.

}while (x>0); // 마지막이 ×1로 끝나도록 x가 0초과일 때까지만 곱하도록 지정. x>=1로 작성해도 상관없다.

Console.WriteLine("결과:");
Console.WriteLine(fac); //반복문이 끝난 팩토리얼의 결과값 출력


번외:

if문을 이용하여 정수 외의 값이 입력될 경우 정수를 입력하라고 출력하도록 만들 수 있다.

 

번외 코드

 

if (xb) //xb(즉, 입력값 x가 정상적으로 정수로 형변환 되었을 경우) 참일 때 실행.
{
    //위에서 작성한 반복문 중 무엇이라도 가져다 두면 된다.


}
else
{
    Console.WriteLine("정수를 입력해주세요.");
}

숫자가 너무 크면 계산이 안된다.(수가 너무 커진다.)
if문을 활용할 경우, 정수가 아니라면 정수를 입력해달라고 나타난다.

 

위 코드는 사실상, 어제의 반복문의 복습이다. '//주석' 에 익숙해지면, 차례대로 무엇을 할 것인지 기록해가면서 작성할 수 있으므로 더 쉽게 코드를 짤 수 있다.

언뜻 봤을 때는 팩토리얼...?어떻게 구성하지? 싶은 것도, 팩토리얼의 계산식을 차례대로 끊어서 생각하면 쉬워진다.

 

예시

1. 팩토리얼=n!=n×(n-1) ×(n-2) ×(n-3)… ×2 ×1=입력한 수부터 1까지의 곱셈

2. n=입력한 수 ( 입력된 값을 int로 형변환할 것.)

3. 1 ×n=n 이므로, 초기값을 1로 지정하고 입력된 수 n부터 n이 1이 될 때까지 반복적으로 곱한다.(fac=1, fac=fac*n)

4. 곱해지는 n값은 계속 1씩 줄어들어 마지막엔 1이된다.(n>0인 동안 계속 곱셈을 반복한다.)

5. 입력된 값이 정수가 아니라면, 팩토리얼 계산이 불가능하다. (형변환 성공여부의 bool값을 확인해 if 조건문 작성)

 

2-2. 숫자맞추기 게임

조건 1: 프로그램 내에서 매번 임의로 수를 지정.

조건 2: 정답을 맞출 때까지 지정된 수가 고정되며, 맞출 때까지 계속 입력가능.

 

우리는 여기서 또 새로운 것을 사용할 것이다. 바로 Random 이다.

Random난수 생성에 사용된다. 즉, 내가 지정한 수의 범위에서 하나를 컴퓨터가 임의로 골라두는 것이다.

Random을 이용한 난수 형성은 아래와 같이 진행된다.

Random num = new Random(); //새로운 Random 클래스를 생성. 해당 랜덤 클래스의 이름은 num으로 만들었다.
int Rnum = num.Next(1, 101);

//임의의 수가 지정될 정수를 Rnum이라는 이름으로 지었다. 범위는 1~100까지다.(101이 아니다.)

 

코드 2

더보기

Random num = new Random();
int Rnum = num.Next(1, 101); //어떤 Random클래스를 사용할지 작성.

//1부터 100까지 랜덤한 수를 만들어, Rnum라는 이름으로 생성함


Console.WriteLine("1부터 100까지의 수 중에서 맞춰야 할 수가 결정되었습니다.");
Console.WriteLine("숫자를 맞춰주세요.");
Console.WriteLine("입력:");

int x; //입력값으로 들어갈 int를 x로 지정, 미리 만들어둠.
do //이제부터 반복문 시작
{
    string xs = Console.ReadLine();

//입력값을 xs라는 이름으로 1차 저장. 정답이 아닐 경우 반복해서 값을 입력해야함.
    bool xb = int.TryParse(xs, out x); //입력된 데이터를 x라는 정수로 변경. xb는 정수 외의 데이터를 판별


    if (xb) //1차로 입력된 x값이 정수인지 판별함
    {
        if(x > Rnum) //x가 Rnum보다 크다면
        {
            Console.WriteLine(x + "보다 더 작습니다."); //내가 입력한 수보다 설정된 수가 더 작음을 알려줌
        }
        else if (x<Rnum) //x가 Rnum보다 작다면
        {
            Console.WriteLine(x + "보다 더 큽니다."); //내가 입력한 수보다 설정된 수가 더 큼을 알려줌
        }
        else //남는 경우의 수는 입력값이 임의 지정값과 동일할 때.
        {
            Console.WriteLine("맞춰야할 수는" + x + "이(가) 맞습니다!");

            //이 칸을 비우고 같은 코드를 while 뒤에 붙여도 됨.
        }

    }
    else //만약 입력된 데이터가 정수가 아닐 경우, 이쪽으로.
    {
        Console.WriteLine("1부터 100까지의 숫자를 넣어주세요.");
    }

while (x != Rnum); //Rnum이 x와 같으면 반복은 정지함.


 

 

3. 학습 요약

오늘은 반복문을 재차 복습했다.

1. 팩토리얼 계산프로그램을 통해 반복되는 계산이 아무리 길어져도, 같은 방식으로 계속 반복된다면 얼마든지 반복문으로 만들 수 있다는 것을 확인했다.

2. Random 클래스는 난수 생성(랜덤 숫자 뽑기)을 하는 방법이다.

   주의: Next(1, 101)로 작성할 경우, 뽑히는 수는 1부터 100까지다. Next(a,b)일 경우 (a ≤ x<b)의 범위를 가지므로 작성에 주의할 것,

4. 내일 학습 할 것은 무엇인지

아직 벗어나지 못한 반복문의 늪... 이중반복문이 나타날 차례이다.

그리고 배열의 최소값괴 최대값 찾기도 할 예정이다.

곧 Unity를 사용할 수 있을 것 같다.