최대값, 최소값 찾기

사용자로부터 일련의 숫자 5개를 입력받아, 그 중에서 최대값과 최소값을 찾는 프로그램 작성하시오.

 

<나의 풀이 과정>

int[] num = new int[5]; // 사용자에게 입력 받을 배열 초기화

int max = num[0]; // 초기화
int min = num[0]; // 초기화

for (int i = 0; i < 5; i++) // 0~4 인덱스 안의 숫자 비교
{
    Console.Write("숫자를 입력하세요: ");
    num[i] = int.Parse(Console.ReadLine()); // 사용자에게 입력 받기

    if (num[i] > max) // num[i]가 max보다 크다면
    {
        max = num[i];
    }
    if (num[i] < min) // num[i]가 min보다 작다면
    {
        min = num[i];
    }
}
Console.WriteLine("최대값: " + max);
Console.WriteLine("최소값: " + min);

초기화가 min이 초기화 된 상태인 0의 값으로 비교되므로 늘 최소값이 0으로 나오게 된다.

 

int[] num = new int[5];

for (int i = 0; i < 5; i++)
{
    Console.Write("숫자를 입력하세요: ");
    num[i] = int.Parse(Console.ReadLine());
}

int max = num[0];
int min = num[0];

for (int i = 0;i < 5; i++) 
{
    if (num[i] > max)
    {
        max = num[i];
    }
    if (num[i] < min)
    {
        min = num[i];
    }
}
Console.WriteLine("최대값: " + max);
Console.WriteLine("최소값: " + min);

사용자가 입력한 숫자를 for문을 통해 5회 반복하여 배열에 넣어준 뒤, 또다시 for문을 통해 5개의 숫자를 비교한다.

 

 

소수 판별하기

주어진 숫자가 소수인지 판별하는 함수와 코드를 만드시오.

 

<나의 풀이 과정>

// 주어진 숫자가 소수인지 판별하는 함수
static bool IsPrime(int num)
{
    if (num <= 1) // 1보다 작거나 같으면 소수가 아니다
    {
        return false;
    }
    for (int i = 2; i < num; i++) // 2보다 크고 자기 자신과 같은 숫자가 되기 전까지 1씩 증가
    {
        if (num % i == 0) // 나누어 떨어지면 소수가 아니다
        {
            return false;
        }
    }

    return true; // 소수
}

static void Main()
{
    Console.Write("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청
    int num = int.Parse(Console.ReadLine()); // 사용자가 입력한 값을 정수로 변환하여 저장

    if (IsPrime(num)) // 입력 받은 숫자가 소수라면
    {
        Console.WriteLine(num + "은 소수입니다."); // 소수임을 출력
    }
    else // 소수가 아니라면
    {
        Console.WriteLine(num + "은 소수가 아닙니다."); // 소수가 아님을 출력
    }
}

이렇게 하면 작은 수일 때는 괜찮지만 큰 수를 입력했을 때 메모리를 많이 잡아먹게 된다.

static bool IsPrime(int num)
{
    if (num <= 1)
    {
        return false;
    }
    for (int i = 2; i <= num / 2; i++) // 2부터 자기 자신의 절반까지만 확인
    {
        if (num % i == 0)
        {
            return false;
        }
    }

    return true;
}

약수는 자기 자신을 제외하면 절반까지가 최대이기 때문에 2로 나눠주면 메모리 사용량을 줄일 수 있다. 그러나 49, 81 등 제곱된 수의 약수는 절반까지 도달하지 않아도 소수가 아님을 확인 할 수 있다.

 

static bool IsPrime(int num)
{
    if (num <= 1)
    {
        return false;
    }
    for (int i = 2; i * i <= num; i++) // 2부터 숫자의 제곱근까지만 확인
    {
        if (num % i == 0)
        {
            return false;
        }
    }

    return true;
}

 

 

 

숫자 맞추기

컴퓨터는 1에서 100까지의 숫자를 임의로 선택하고, 사용자는 이 숫자를 맞춘다. 사용자가 입력한 숫자가 컴퓨터의 숫자보다 크면 "너무 큽니다!"라고 알려주고, 작으면 "너무 작습니다!"라고 알려준다. 사용자가 숫자를 맞출 시, 게임 종료.

 

Random random = new Random();
int numberToGuess = random.Next(1, 101);
int userNum = 0;
int numberTry = 0;
bool playAgain = true;

Console.WriteLine("숫자 맞추기 게임을 시작합니다. 1에서 100까지의 숫자 중 하나를 맞춰보세요.");
while (playAgain)
{
    while (numberToGuess != userNum)
    {
        Console.Write("숫자를 입력하세요: ");
        userNum = Convert.ToInt32(Console.ReadLine());

        if (numberToGuess > userNum)
        {
            Console.WriteLine("너무 작습니다!");
        }
        else if (numberToGuess < userNum)
        {
            Console.WriteLine("너무 큽니다!");
        }
        numberTry++;
    }
    Console.WriteLine("축하합니다! {0}번 만에 숫자를 맞추었습니다.", numberTry);
    playAgain = false;
}

 

 

틱택토(콘솔)

 

<나의 풀이 과정>

 

+ Recent posts