[백준 BOJ] 18110번 solved.ac (C++/cpp)

2022. 8. 18. 15:11PS (Program Solving)/BOJ (백준)

문제 설명

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

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

백준 BOJ 18110번 solved.ac 문제 사진1
백준 BOJ 18110번 solved.ac 문제 사진2

 

접근 방법 - 정렬의 응용문제

백준의 18110번 문제는 정렬을 이용하여 해결해야 하는 다소 심화된 연산 문제이다.

해당 문제는, 입력받은 의견들을 통틀어 특정 규칙에 따라 난이도를 결정하여 출력해야 하는 문제이다.

이때, 모든 난이도 의견의 30% 절사평균으로 결정하여 반올림하는 규칙을 통하여 난이도를 결정한다.

(자세한 내용은 문제를 참고하길 바란다.)

필자는 정렬 함수와 cmath 헤더의 올림 및 내림 함수를 이용하여 해당 문제를 해결하였다.

이 함수들의 사용 방법이 궁금하거나 문제 해결에 어려움을 겪고 있다면, 아래의 코드와 설명을 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 난이도 의견을 입력받을 배열(arr)을 전역 변수에 선언해둔다.

 

2) 의견의 개수(n)를 입력받는다.

(여기서 0을 입력받았다면, 난이도에 대한 의견이 없다는 뜻이므로 0을 출력하고 즉시 실행 종료한다.)

 

3) n의 크기만큼 난이도 의견(arr)을 입력받는다.

 

4) arr의 값들을 sort() 함수를 통하여 오름차순으로 정렬한다.

 

5) 30% 절사평균이란, 전체의 15% 값을 위아래로 배제한 뒤의 평균을 의미한다.

따라서, n에 0.15를 곱한 값을 변수 num에 저장하면서 선언한다.

그리고 실수로 표현된 num의 값을 반올림하여 정수로 변환한다.

 

6) 절사평균을 내기 위한 난이도 점수 합계를 구하도록 한다.

변수 sum을 선언한 뒤, num을 통하여 극단적인 값들을 제외한 난이도 의견 값들을 sum에 더한다.

그리고 sum에 대한 평균을 내어, sum의 값을 해당 값으로 갱신한다.

 

7) 실수로 표현된 sum의 값을 반올림해서 정수로 변환하여 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <algorithm>
#include <cmath>
#define endl '\n'
using namespace std;

//백준 18110번 코드
int arr[300001];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	if (n == 0) {
		cout << 0 << endl; return 0;
	}
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	sort(arr, arr + n);

	double num = n * 0.15;
	if ((int)(num * 10) % 10 >= 5) { num = ceil(num); }
	else { num = floor(num); }

	double sum = 0;
	for (int i = num; i < n - num; i++) {
		sum += arr[i];
	}
	sum /= (n - num * 2);

	if ((int)(sum * 10) % 10 >= 5) { sum = ceil(sum); }
	else { sum = floor(sum); }
	cout << sum << endl;
}

 

제출 결과

백준 BOJ 18110번 solved.ac 문제 C++ 제출 결과

(2022.08.04 백준 18110번 문제 제출 결과)

반응형