[실습으로 다지는 C#] 랜덤 값 맞추기

 

 이번 강의에서는 컴퓨터가 생각한 랜덤 값(0~99)을 사용자가 10번 시도 내에 맞추는 프로그램을 만들어 봅시다.

 먼저 문제를 해결하기 위한 논리를 생각하고 의사 코드(pseudo code)로 표현해 보세요. 여러분께서 먼저 작성한 후에 비교해 보세요.

rnum := 랜덤 값
반복(tcnt:1->10)                            
    guess := 추측값 입력
    조건(guess is equals rnum)                                    
        반복문 탈출
    조건(guess>rnum)
        더 작다고 알려준다.
    아니면
        더 크다고 알려준다.

조건(시도 횟수가 10보다 작거나 같으면)
    시도 횟수와 성공하였음을 알려준다.
아니면            
    실패하였다고 알려준다.

이제 프로젝트를 생성하여 의사 코드를 주석으로 처리하고 코드를 작성해 봅시다.

 

프로그램 시작부에 어떠한 프로그램인지 보여주기로 합시다. 참고로 C#에서 랜덤 값을 생성할 때 사용하는 형식은 Random 클래스입니다. 시작할 때 Random 형식 개체를 생성하세요.

Random random = new Random();
Console.WriteLine("0~99 사이의 정수 중에 컴퓨터가 생각한 수를 맞춰보세요.");
Console.WriteLine("*** 10회 안에 맞춰야 성공입니다.");

0~99 사이의 값 중에 랜덤 값을 발생시킵니다. Random 형식 개체의 Next 메서드를 호출하면 랜덤 값을 발생시킵니다. 만약 입력 인자로 정수 n을 전달하면 n가지(0~n-1) 정수 중에 하나의 랜덤 값을 반환합니다.

int rnum = random.Next(100);//rnum:= 랜덤 값            

 사용자는 총 10회 시도할 수 있습니다. 시도 횟수를 기억할 변수(tcnt)와 사용자가 예측한 정수를 기억할 변수(guess)를 선언하고 반복문을 작성합시다.

int tcnt;
int guess;
for(tcnt=1; tcnt<=10; tcnt++)//반복(tcnt: 1->10)
{
}

사용자에게 몇 번째 시도인지 알려주고 예상 값을 입력받습니다.

Console.Write("{0}번째 시도, 예상값:", tcnt);
int.TryParse(Console.ReadLine(), out guess);//guess:= 추측값 입력

예측한 값과 랜덤 값이 일치하면 반복문을 탈출합니다.

if(guess == rnum)//조건(guess is equals rnum)
{
    break;//반복문 탈출
}

일치하면 반복문을 탈출하였기 때문에 현재 반복문 내부라면 일치하지 않다는 것입니다. 이제 예측한 값이 랜덤 값보다 큰 지 판별하여 결과를 알려줍니다.

if(guess>rnum)//조건(guess > rnum)
{
    Console.WriteLine("더 작습니다.");//더 작다고 알려준다.
}
else//아니면
{
    Console.WriteLine("더 큽니다.");//더 크다고 알려준다.
}

 이제 반복문에서 할 일은 끝났습니다. 반복문 수행 후에 성공하여 반복문을 나온 것이지 시도 횟수를 모두 사용하여 나온 것인지 판별합니다.

if(tcnt<=10)//조건(시도 횟수가 10보다 작거나 같으면)
{
    Console.WriteLine("{0}번 시도하여 정답을 맞추셨군요", tcnt);//시도 횟수와 성공하였음을 알려준다.
}
else//아니면
{
    Console.WriteLine("실패하였습니다.");//실패하였다고 알려준다.
}

마지막으로 컴퓨터가 생각한 랜덤한 정수를 알려줍니다.

Console.WriteLine("컴퓨터가 생각한 정수는 {0}", rnum); 

프로젝트를 빌드한 후에 테스트를 수행하세요. 여기에서는 실행 결과는 생략할게요.

다음은 이번 실습에서 작성한 소스 코드입니다.

//ehpub.co.kr
//실습으로 다지는 C#
//8. 랜던 값 맞추기
using System;

namespace _008_랜덤_값_맞추기
{
    class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random();
            Console.WriteLine("0~99 사이의 정수 중에 컴퓨터가 생각한 수를 맞춰보세요.");
            Console.WriteLine("*** 10회 안에 맞춰야 성공입니다.");

            int rnum = random.Next(100);//rnum:= 랜덤 값
            int tcnt;
            int guess;
            for(tcnt=1; tcnt<=10; tcnt++)//반복(tcnt: 1->10)
            {
                Console.Write("{0}번째 시도, 예상값:", tcnt);
                int.TryParse(Console.ReadLine(), out guess);//guess:= 추측값 입력
                if(guess == rnum)//조건(guess is equals rnum)
                {
                    break;//반복문 탈출
                }
                if(guess>rnum)//조건(guess > rnum)
                {
                    Console.WriteLine("더 작습니다.");//더 작다고 알려준다.
                }
                else//아니면
                {
                    Console.WriteLine("더 큽니다.");//더 크다고 알려준다.
                }
            }

            if(tcnt<=10)//조건(시도 횟수가 10보다 작거나 같으면)
            {
                Console.WriteLine("{0}번 시도하여 정답을 맞추셨군요", tcnt);//시도 횟수와 성공하였음을 알려준다.
            }
            else//아니면
            {
                Console.WriteLine("실패하였습니다.");//실패하였다고 알려준다.
            }
            Console.WriteLine("컴퓨터가 생각한 정수는 {0}", rnum);
        }
    }
}