[YULO] 알고스팟 입문자 질문입니다

  • firenin
    firenin

    YULO 선생님의 고민 문제입니다.
    https://algospot.com/judge/problem/read/YULO

    가장 큰 1등의 기대 점수를 얻는 문제입니다.

    문제에 대한 접근이 잘못된건지, 다른 문제인건지 알 방법이 없어서

    질문 남깁니다.

    문제 접근은 아래와 같은 방식입니다.

    *
    점수를 n개의 동적 배열에 입력한다.
    입력 받은 점수를 오름차순으로 정렬한다.
    i, tempIndex 두 개의 인덱스는 맨 앞과 맨 뒤에서 한 칸씩
    전, 후진 하며 해당 값의 평균을 구한다.

    평균 중 가장 큰 값을 출력한다.
    *

    #include <iostream>
    using namespace std;
    
    void q_sort(int nums[], int left, int right);
    void QuickSort(int nums[], int size)
    {
        q_sort(nums, 0, size - 1);
    }
    
    void q_sort(int numbers[], int left, int right)
    {
        if (left == right) return;
        int pivot, l_hold, r_hold;
        l_hold = left;
        r_hold = right;
        pivot = numbers[left];
    
        while (left < right)
        {
            while ((numbers[right] >= pivot) && (left < right))
                right--;
            if (left != right)
            {
                numbers[left] = numbers[right];
                left++;
            }
    
            while ((numbers[left] <= pivot) && (left < right))
                left++;
    
            if (left != right)
            {
                numbers[right] = numbers[left];
                right--;
            }
        }
    
        numbers[left] = pivot;
        pivot = left;
        left = l_hold;
        right = r_hold;
    
        if (left < pivot)
            q_sort(numbers, left, pivot - 1);
        if (right > pivot)
            q_sort(numbers, pivot + 1, right);
    }
    
    float GetAverage(float s1, float s2)
    {
        return (s1 + s2) / 2;
    }
    int main()
    {
        int t; // t <= 50
        int n; // 3 <= n <= 40
        cin >> t;
        while (t--)
        {
            float maxScore = 0;
            cin >> n;
            int* score = new int[n];
    
            for (int i = 0; i < n; i++)
            {
                cin >> score[i]; // 0점 이상 100점 이하
            }
    
            QuickSort(score, n);
    
            int tempIndex = n - 1;
            float tempScore = 0;
            for (int i = 0; i < n; i++)
            {
                tempScore = GetAverage(score[i], score[tempIndex]);
                if (maxScore < tempScore)
                {
                    maxScore = tempScore;
                }
                tempIndex--;
            }
    
            cout << fixed;
            cout.precision(1);
            cout << maxScore;
        }
    }
    

    9년 전
1개의 댓글이 있습니다.
  • VOCList
    VOCList

    코드를 모두 보지는 않았지만, 먼저 메인 함수만 보았을 때 매번 답 출력 후에 줄바꿈이 출력되지 않는 것 같습니다.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.