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
'BAEKJOON > 수학' 카테고리의 다른 글
백준 2981번 [검문](C++)-yes6686- 티스토리 (0) | 2024.01.11 |
---|---|
백준 15377번 [Bounce Bounce Bounce](C++)-yes6686- 티스토리 (1) | 2024.01.06 |
백준 11650번 [좌표 정렬하기](C++)-yes6686- 티스토리 (1) | 2024.01.05 |
백준 11050번 [이항 계수 1](C++)-yes6686- 티스토리 (0) | 2024.01.05 |
백준 10989번 [수 정렬하기 3](C++)-yes6686- 티스토리 (1) | 2024.01.05 |