알고리즘/solved.ac CLASS 2

18110번: solved.ac

melitina 2024. 6. 25. 00:32

https://www.acmicpc.net/problem/18110

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	// (0 ≤ n ≤ 3 × 10^5)
	int n;
	// 모든 난이도 의견은 1 이상 30 이하이다.
	int res = 0;

	// 첫 번째 줄에 난이도 의견의 개수 n이 주어진다.
	cin >> n;

	// 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
	if (n == 0)
	{
		cout << res;

		return 0;
	}

	vector<int> numbers(n);

	// 이후 두 번째 줄부터 1 + n번째 줄까지
	// 사용자들이 제출한 난이도 의견 n개가 한 줄에 하나씩 주어진다.
	for (int i = 0; i < n; i++) {
		cin >> numbers[i];
	}

	// 난이도 정렬
	sort(numbers.begin(), numbers.end());

	// 의견이 하나 이상 있다면,
	// 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정한다.
	// 30% 절사평균의 경우 위에서 15%,
	// 아래에서 15%를 각각 제외하고 평균을 계산한다.
	// 제외되는 사람의 수는 위, 아래에서 각각 반올림한다.
	int idx = round(n * 0.15);
	double sum = 0;

	// 절사평균으로 제외하고 난 뒤 의견들 총합 계산
	for (int i = idx; i < n - idx; i++) {
		sum += numbers[i];
	}

	// 계산된 평균도 정수로 반올림된다.
	res = round(sum / (n - idx * 2));

	// solved.ac가 계산한 문제의 난이도를 출력한다.
	cout << res;

	return 0;
}

 

https://uigwonblog.tistory.com/28

 

'알고리즘 > solved.ac CLASS 2' 카테고리의 다른 글

2108번: 통계학  (0) 2024.06.26
11651번: 좌표 정렬하기 2  (0) 2024.06.18
1676번: 팩토리얼 0의 개수  (0) 2024.06.16
28702번: FizzBuzz  (1) 2024.06.16
30802번: 웰컴 키트  (1) 2024.06.14