작은 걸음 III — 프로그램으로 생각하기

두 번째로 큰 값 찾기

두 번째로 큰 값 찾기

이번에 배울 것

새 문제를 풀기 전에 무엇을 답으로 할지와 입력의 가정을 정합니다. 이번에는 두 자리의 후보를 기억합니다.

실행해 보기

예제 · example1.cpp
void small_main()
{
    Array<int> numbers = {8, 3, 12, 5, 10};

    int largest = numbers[0];
    int second = numbers[1];

    if (second > largest)
    {
        int temp = largest;
        largest = second;
        second = temp;
    }

    for (int i = 2; i < numbers.length(); i = i + 1)
    {
        if (numbers[i] > largest)
        {
            second = largest;
            largest = numbers[i];
        }
        else if (numbers[i] > second)
        {
            second = numbers[i];
        }
    }

    print("Second largest: ", second);
}

예제는 원소가 적어도 두 개이며, 두 번째 순위에 중복도 포함합니다. {9, 9, 3}이라면 답은 9입니다. 서로 다른 값 중 둘째라는 뜻은 아닙니다.

새 최댓값을 만나면 이전 최댓값을 second로 옮깁니다. 8, 3, 12, 5, 10에서는 답이 10입니다.

Exercise — 두 번째로 작은 값

서로 다른 값이 두 개 이상 있다고 가정하고 두 번째로 작은 값을 찾으세요.

연습 문제 코드 · exercise1_starter.cpp
void small_main()
{
    Array<int> numbers = {8, 3, 12, 5, 10};

    // find the second smallest value.
}

Hint

smallest와 second를 기억하고, 새 값이 smallest보다 작을 때 두 값을 함께 갱신하세요.

풀이 보기
void small_main()
{
    Array<int> numbers = {8, 3, 12, 5, 10};

    int smallest = numbers[0];
    int second = numbers[1];

    if (second < smallest)
    {
        int temp = smallest;
        smallest = second;
        second = temp;
    }

    for (int i = 2; i < numbers.length(); i = i + 1)
    {
        if (numbers[i] < smallest)
        {
            second = smallest;
            smallest = numbers[i];
        }
        else if (numbers[i] < second)
        {
            second = numbers[i];
        }
    }

    print(second);
}
← 이전 레슨다음 레슨 →