반응형
안녕하세요? 수구리입니다.
이번에 풀 백준 문제는 평균은 넘겠지라는 문제입니다.
단계별로 푸는 문제를 쭉 풀고 있습니다. 지금은 1차원 배열과 관련된 문제들입니다.
문제는 아래 링크에 두었습니다. 문제를 확인하고 와주세요
[ 문제 ] 4344번: 평균은 넘겠지
https://www.acmicpc.net/problem/4344
[ 나의 풀이 ]
#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>
#define all(v) v.begin(), v.end()
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
double overMeanStuNum = 0;
double numOfStu = 0;
int score;
double mean;
double sum = 0;
double overMeanRate = 0;
vector<double> v;
int loop = 1; // loop count
int n; // test case
cin >> n;
while (n >= loop) {
cin >> numOfStu;
for (int i=0; i < numOfStu; i++) {
cin >> score;
v.push_back(score);
sum += v[i];
}
mean = sum / numOfStu;
for (int i=0; i < numOfStu; i++){
if (v[i] > mean) overMeanStuNum++;
}
overMeanRate = (overMeanStuNum / numOfStu) * 100;
cout << fixed;
cout.precision(3);
cout << overMeanRate << "%\n" ;
// reset
v.clear();
overMeanStuNum = 0;
overMeanRate = 0;
mean = 0;
sum = 0;
loop++;
}
}
뭔가 더 코드를 줄여서 간결하게 할 수 있을 것 같은데 생각을 더 해보아야 겠습니다.
[ 변수 설명 ]
- overMeanStuNum : 평균 이상의 학생들의 수
- numOfStu : 학생들의 수
- score : 학생들의 점수
- mean : 평균
- sum : 총합
- overMeanRate : 평균을 넘는 학생들의 비율
- loop : n번의 테스트 케이스를 순회하기 위한 변수
- n : 총 test case의 수
[ 설명 ]
- 각 변수들을 선언해주고 테스트 케이스를 입력받음.
- loop변수가 n과 같아질때까지 반복
- 학생들의 수를 입력받고 그 학생들의 점수를 입력받아 vector v에 저장하면서 동시에 총합을 계산
- 총합을 다 더하고 나면 평균을 계산
- 평균 이상의 학생수들의 비율을 계산하기 위해서 vector v의 요소들을 순회하면서 평균보다 높은 학생들의 수 계산
- 평균을 넘는 학생들이 비율을 계산하고 해당 test case의 비율을 소수점 3번째 자리까지 출력한다.
- 모든 변수들을 초기화하고 loop 변수를 증가시키면서 3 ~ 6의 과정을 반복한다.
반응형
'✏️ PS > Boj' 카테고리의 다른 글
[ C++ ] 백준 10818번: 최소, 최대 (0) | 2021.10.15 |
---|---|
[ C++ ] 백준 8958번: OX퀴즈 (0) | 2021.10.14 |
[ C++ ] 백준 3052번: 나머지 (0) | 2021.10.06 |
[ C++ ] 백준 2577번: 숫자의 개수 (0) | 2021.10.06 |
[ C++ ] 백준 1546번: 평균 (4) | 2021.10.05 |