728x90
18110번: solved.ac
5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.
www.acmicpc.net
문제 개요
백준 18110번 문제는 solved.ac라는 문제를 해결하는 과정에서의 난이도를 결정하는 문제입니다. 사용자들이 난이도를 평가하고, 그 중 일부를 제외한 평균을 구하는 방식으로 난이도를 결정합니다. 구체적으로, 상위와 하위 일정 비율의 평가를 무시하고, 나머지 평가의 평균을 내서 이를 반올림하여 최종 난이도를 결정합니다. 문제의 핵심은 올바른 데이터의 선택과 반올림 처리에 있습니다.
C언어로 풀어보기
C언어로 이 문제를 푸는 것은 데이터의 정렬, 선택, 그리고 반올림 처리를 어떻게 효율적으로 할 수 있느냐에 대한 도전입니다. 아래는 이 문제를 해결하기 위한 접근 방법과 간단한 코드 예시를 제공합니다.
1. 기본 개념 잡기
먼저, 문제의 요구사항을 정확히 이해해야 합니다. 평가의 상위 n%와 하위 n%를 제외한 나머지 평가들의 평균을 구하라는 것이죠. 여기서 n%는 입력값에 따라 달라집니다. 이를 효율적으로 처리하기 위해 배열을 사용하고, 정렬 알고리즘을 활용해야 합니다.
2. 코드 스케치
#include <stdio.h>
#include <stdlib.h>
#include <math.h> // round 함수 사용을 위해 추가
int compare(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main() {
int n;
scanf("%d", &n); // 평가의 개수 입력 받기
if(n == 0) { // 입력값이 0일 경우 0 출력 후 종료
printf("0\n");
return 0;
}
int ratings[n];
for(int i = 0; i < n; i++) {
scanf("%d", &ratings[i]); // 평가 점수 입력 받기
}
// 평가 점수 정렬
qsort(ratings, n, sizeof(int), compare);
// 상위 n%와 하위 n% 계산
double percent = round(n * 0.15);
// 평가 점수 합 계산
int sum = 0;
for(int i = percent; i < n - percent; i++) {
sum += ratings[i];
}
// 평균 계산 및 출력
if(n - 2 * percent > 0) {
double average = round((double)sum / (n - 2 * percent));
printf("%.0f\n", average);
} else {
printf("0\n");
}
return 0;
}
3. 코드 해설
compare
함수는qsort
함수에서 사용되어 배열을 오름차순으로 정렬합니다.- 입력받은 평가 점수들을
ratings
배열에 저장한 후,qsort
함수로 정렬합니다. - 상위와 하위 n%를 제외해야 하므로,
round
함수를 이용해 반올림 처리된 제외할 비율을 계산합니다. - 제외할 비율을 적용한 후의 평가 점수들만 합산하여 평균을 구하고,
round
함수로 반올림 처리한 후 출력합니다.
마무리
이와 같은 접근 방식으로 문제를 해결해보시면, C언어로도 재미있게 문제로 다시찾겠습니다. 감사합니다.
728x90
'백준 문제 풀이 > c언어' 카테고리의 다른 글
백준 1546번 "평균" --- c (0) | 2024.03.26 |
---|---|
백준 1436번 "영화감독 숌" --- c (1) | 2024.02.29 |
백준 1018번 "체스판 다시 칠하기" -- C (1) | 2024.02.27 |
백준 25083 C언어 문제 풀이 - 새싹 (0) | 2024.01.28 |
백준 10989 C언어 문제 풀이 - 수 정렬하기 3 (0) | 2024.01.28 |