문제
https://www.acmicpc.net/problem/4344
문제 요약
각 테스트 케이스마다 학생 수 n명의 점수가 주어진다.
점수는 0 이상 100 이하인 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생의 비율을 반올림하여 소수점 셋째자리까지 반올림하여 출력한다.
코드
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int t;
int main() {
// 입출력 속도 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> t;
while (t--) {
int n;
cin >> n;
double avr = 0;
vector<double> v;
for (int i = 0; i < n; i++) {
double num;
cin >> num;
avr += num;
v.push_back(num);
}
avr = avr / n;
double cnt = 0;
for (int i = 0; i < v.size(); i++) {
if (v[i] > avr) cnt++;
}
double res = (cnt / n) * 100;
cout << fixed << setprecision(3) << res << "%\n";
}
return 0;
}
코드 설명
1. 각 테스트 케이스에서 학생들의 점수 입력을 받을 때마다 벡터 v에 저장한다.
2. 벡터에 존재하는 점수의 평균을 구한다.
3. 다시 벡터에 존재하는 점수를 차례로 접근하면서, 평균보다 큰 점수 개수를 센다.
4, 평균 이상 점수의 개수 / 점수의 총 개수 × 100 으로 결과 값을 double 형식으로 구한다.
5. 결과를 소수점 셋째자리까지 반올림하여 출력한다.
고찰
C++에서 소수점 n번째 자리까지 반올림하여 출력해야할 때,
iomanip 라이브러리의 setprecision 을 사용하면 된다.
ex) 소수점 셋째짜리까지 res를 출력
cout << fixed << setprecision(3) << res;
'Algorithm Problems > 수학' 카테고리의 다른 글
[백준/C++] 1269번: 대칭 차집합 (1) | 2024.10.31 |
---|---|
[백준/C++] 피보나치 수 3 (1) | 2024.08.04 |
[백준/C++] 9471번: 피사노 주기 (2) | 2024.08.04 |
[백준/C++] 18110번: solved.ac (1) | 2024.06.04 |
[백준/C++] 5692번: 팩토리얼 진법 (0) | 2024.05.18 |