728x90

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, first = 0, second, third, fourth, temp;
    vector<pair<int, int>> vec;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> temp;
        vec.push_back(make_pair(temp, 0));
        first += temp;
    }
    sort(vec.begin(), vec.end());

    first = round((double)first / (double)n);
    second = vec[n / 2].first;
    fourth = vec[n - 1].first - vec[0].first;

    if (vec.size() == 1) third = vec[0].first;
    else{
        //빈도수 계산
        for (int i = 0; i < n; i++){
            int idx = i;
            for (int j = i + 1; j < n; j++){
                if (vec[idx].first == vec[j].first){
                    vec[idx].second++;
                    i++;
                }
                else break;
            }
        }
        // 최빈값 중 최대값 찾기
        int max = vec[0].second;
        for (int i = 1; i < n; i++) if(vec[i].second > max) max = vec[i].second;

        // 최빈값이 0이라면 모든 수가 다르므로 2번째 값 반환
        if (max == 0) third = vec[1].first;
        else{
            vector<int> c;
            for (int i = 0; i < n; i++){
                if (vec[i].second == max)
                    c.push_back(vec[i].first);
            }
            if (c.size() == 1) third = c[0];
            else third = c[1];
        }
    }
    cout << first << "\n" << second << "\n" << third << "\n" << fourth;
}

빈도수 계산하는 방법-> 정렬이 된 상태이기 때문에 이렇게 생각해서 풀 수 있다.

계속 문제를 틀렸는데 그 이유가 빈도수 계산시 값이 같으면 i값을 증가시켰다. 그랬더니 if문에 vec[i]도 증가시켜서 문제였다. 그래서 if문에 vec[i]값을 고정시켰다.

 

반응형

+ Recent posts