본문 바로가기

BAEKJOON/수학

백준 18110번 [solved.ac](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 18110 [solved.ac]


문제 링크: https://www.acmicpc.net/problem/18110

문제 설명:

solved.ac의 난이도 평가에서 아웃라이어를 제거하고, 나머지 값의 평균을 구하는 문제입니다. 입력으로 주어진 난이도 데이터에서 상위와 하위 15%를 제거하고, 남은 값들의 평균을 반올림하여 출력합니다.


문제 해결 코드


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

int arr[300000];

int main() {
    int n;
    cin >> n;
    double sum = 0;

    if (n == 0) {
        cout << 0 << endl;
    } else if (n == 1) {
        int x;
        cin >> x;
        cout << x << endl;
    } else if (n == 2) {
        double a, b;
        cin >> a >> b;
        cout << fixed;
        cout.precision(0);
        cout << round((a + b) / 2) << endl;
    } else {
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }

        int k = round(n * 0.15);
        sort(arr, arr + n);

        for (int i = k; i < n - k; i++) {
            sum += arr[i];
        }

        double result = sum / (n - 2 * k);
        cout << fixed;
        cout.precision(0);
        cout << round(result) << endl;
    }
}

코드 설명

  • 핵심 알고리즘: 정렬을 사용하여 상위와 하위 15%를 제거하고 나머지 값을 기반으로 평균을 계산합니다.
  • 구현 세부사항:
    • 입력 데이터의 개수가 0, 1, 2인 경우를 예외적으로 처리
    • 나머지 경우, 정렬 후 상위 및 하위 15% 인덱스의 값을 제외하고 평균 계산
    • 결과는 반올림하여 출력
  • 시간 복잡도: O(n log n)
    • 정렬: O(n log n)
    • 합산: O(n)

결과

주어진 데이터에서 상위 및 하위 15%를 제거한 뒤 평균을 계산하여 출력합니다. 정렬과 간단한 수학 연산을 통해 해결했습니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST