알고리즘 모음(C++)

백준 18110 - solved.ac(C++) 본문

백준

백준 18110 - solved.ac(C++)

공대생의 잡다한 사전 2023. 12. 4. 14:24

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

 

18110번: solved.ac

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

www.acmicpc.net

반올림과 평균을 구하는 코드를 요구하는 문제입니다.

 

이 문제를 푸는 요점은 반올림을 하는 코드를 구할 수 있는지였습니다.

 

반올임을 하기 위해선, 일단 double형을 통해 소수점을 포함한 값을 저장합니다.

그 다음, 해당 값을 int형으로 변환시킨 값을 만들어줍니다. -> 해당 과정은 소수점을 없애줍니다.

두 값을 뺐을 때, 0.5이상이라면 +1을 해주면 됩니다.

 

주의할 점은, 0개가 들어왔을 경우에는 항상 값이 0이라는 점과

더할 때 값은 항상 오름차순 혹은 내림차순으로 정렬되어 있어야 한다는 점입니다.

 

 

자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>

using namespace std;

int N;
vector<int> score;

void solve(){
    double cut = (double)N * 0.15;
    int point = N * 0.15;
    if(cut - (double)point >= 0.500) point += 1;
    // 15%의 인원을 구하기
    sort(score.begin(), score.end());
    double sum = 0.0;
    for(int i = point; i < score.size()-point; i++){
        sum += (double)score[i];
    }
    sum /= (double)(score.size() - 2*point);
    // 평균 구하기
    if(sum - (int)sum >= 0.500) cout << (int)sum + 1;
    else cout << (int)sum;
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for(int i = 1; i <= N; i++){
	    int x;
	    cin >> x;
	    score.push_back(x);
	}
	if(N == 0) cout << "0";
	else solve();
	return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요.