사전캠프/달리기반

달리기반 Lv.2 배열 요소의 최대값과 최소값 찾기

서보훈 2024. 8. 14. 16:38

  • int[] numbers = { 10, 20, 30, 40, 50 }; 이와 같이 주어진 숫자 배열에서 최대값과 최소값을 찾는 프로그램을 작성하세요.
    • Console.WriteLine(); 을 사용해 최대값과 최소값을 각각 출력할 수 있습니다.

배열의 최소값, 최대값을 찾는 프로그램을 작성해야합니다.

 

반복문을 통해 배열의 모든 원소에 접근하여 이전에 가장 작은값, 큰값과 현재 접근중인 배열의 값을 비교하여 저장된 값을 변경하는 방식으로 최소, 최대값을 확인할 수 있습니다.

 

단, 그런 방식을 사용하기 위해서는 처음에 어떤값을 사용하여 비교할지를 정해주어야 할 필요가 있습니다.

초기값을 설정하는 방법으로

  1. 배열의 첫번째 값을 최소, 최대값에 저장하여 사용
  2. 사용할 변수의 자료형의 최소값, 최대값을 사용

이 있습니다

1번 방법을 사용할경우, 반복문을 사용할 때, 0번 자리의 값을 사용하고 시작하기 때문에, 시작값을 0 혹은 1로 사용할 수 있습니다.

2번 방법을 사용할경우, 반복문 사용시 0번 자리부터 비교를 시작하기 때문에 시작값을 무조건 0으로 사용하게됩니다.

또한 자료형의 최대, 최소값이 저장되어있기 때문에 첫번째 반복에서 무조건 0번 자리값이 저장되게 됩니다.

 

이를 기반으로 프로그램의 흐름을 분석해보면

  1. 배열, 최소값을 저장할변수, 최대값을 저장할 변수 선언 및 값 배정
  2. 배열의 모든 원소에 접근하는 반복문 구성
  3. 각 배열의 원소에 현재 최소값, 최대값에 저장된 값을 비교, 교체
  4. 출력

의 순서로 진행됩니다.

 

먼저 배열과 최대, 최소값이 저장될 변수를 선언해주겠습니다.

2번 방법, 자료형의 최대, 최소값을 저장하여 사용해주도록 하겠습니다.

class FindMinMax
{
    static void Main()
    {
        int[] numbers = { 10, 20, 30, 40, 50 };

        //최대, 최소값 저장
        int minNumber = int.MaxValue;
        int maxNumber = int.MinValue;
    }
}

 

여기서 최소값에는 해당 자료형의 최대값을 저장하고, 최대값에는 자료형의 최소값을 저장해주도록 합니다.

 

만약 1번 방법을 사용할경우의 코드는 이와 같습니다.

class FindMinMax
{
    static void Main()
    {
        int[] numbers = { 10, 20, 30, 40, 50 };

        //최대, 최소값 저장
        int minNumber = numbers[0];
        int maxNumber = numbers[0];
    }
}

 

 

배열의 모든 원소에 접근하는 반복문을 만들어주도록 하겠습니다.

class FindMinMax
{
    static void Main()
    {
        //...
        //모든 배열의 원소를 확인하는 반복문
        for(int i = 0; i < numbers.Length; i++)
        {
        
        }
    }
}

5개의 원소를 가진 배열의 길이는 5입니다. 또한 배열의 자리는 0번부터 시작되어 마지막 자리는 4번 자리가 되기 때문에 0으로 시작해서 5보다 작을때 까지 반복문을 반복합니다.

 

배열의 각 원소값을 최대, 최소값과 비교하고 교체하겠습니다.

class FindMinMax
{
    static void Main()
    {
        //...
        //모든 배열의 원소를 확인하는 반복문
        for(int i = 0; i < numbers.Length; i++)
        {
            //저장된 가장 작은값보다, i번 자리의 값이 작으면
            if(minNumber > numbers[i])
            {
                //minNumber에 해당값 저장
                minNumber = numbers[i];
            }
            //저장된 가장 큰값 보다, i번 자리의 값이 크면
            if(maxNumber < numbers[i])
            {
                //maxNumber에 해당값 저장
                maxNumber = numbers[i];
            }
        }
    }
}

if문을 사용해 numbers의 i번째 자리에 저장된 값과, 현재 저장된 큰값, 작은값을 비교해줍니다.

minNumber에 저장된 값보다 i번째 값이 작으면, minNumber를 교체합니다.

maxNumber는 i번 값 더 크면 교체합니다.

 

마지막으로 반복문이 종료되면 저장된 값을 출력해줍니다.

class FindMinMax
{
    static void Main()
    {
        //...
        //모든 배열의 원소를 확인하는 반복문
        for(int i = 0; i < numbers.Length; i++)
        {
            //...
        }
        //출력
        Console.WriteLine($"Min Number : {minNumber}");
        Console.WriteLine($"Max Number : {maxNumber}");
    }
}

 

결과를 확인해보도록 하겠습니다.

배열중 가장 작았던 10이 minNumber에 저장되어있고, 가장 큰 50이 maxNumber에 저장되어 출력되는것을 확인할 수 있습니다.

 


전체 코드입니다.

class FindMinMax
{
    static void Main()
    {
        int[] numbers = { 10, 20, 30, 40, 50 };

        //최대, 최소값 저장
        int minNumber = int.MaxValue;
        int maxNumber = int.MinValue;

        //모든 배열의 원소를 확인하는 반복문
        for(int i = 0; i < numbers.Length; i++)
        {
            //저장된 가장 작은값보다, i번 자리의 값이 작으면
            if(minNumber > numbers[i])
            {
                //minNumber에 해당값 저장
                minNumber = numbers[i];
            }
            //저장된 가장 큰값 보다, i번 자리의 값이 크면
            if(maxNumber < numbers[i])
            {
                //maxNumber에 해당값 저장
                maxNumber = numbers[i];
            }
        }
        //출력
        Console.WriteLine($"Min Number : {minNumber}");
        Console.WriteLine($"Max Number : {maxNumber}");
    }
}