알고리즘/BOJ
[BOJ] 4344 - 평균은 넘겠지
쭁쭁이
2018. 4. 3. 02:16
문제
학생들의 시험 점수들을 받아 평균을 구하고 평균이 넘는 학생들의 비율을 계산하는 문제.
난이도
난이도 下, 소요시간 10분
풀이 과정
새벽에 잠이 안와서 쉬운 거 하나 풀고 기쁜 마음으로 잠들자는 생각에 적당히 쉬운 걸 찾다가
정답률 40%정도면 적절하다 싶어서 골랐다.
scores라는 vector<int>형 배열을 만들고 차례차례 값을 받아 push해준 뒤,
accumulate 함수로 0.0부터 시작해서 scores의 첫 번째 원소부터 마지막 원소까지 다 더하고 scores의 원소의 개수로 나눠준다.
예전 같았으면 C++을 쓰면서도 포인터적인(?) 사고를 못벗어나고
동적할당을 해서 값을 입력받고 평균도 직접 함수를 짜서 구했겠지만
이젠 그냥 STL로 해결하니 매우매우매우 편하다.
이제 scores에서 pop해가면서 평균보다 큰놈들의 개수를 세고 비율을 구해서 출력하면 끝~~~~
매우 쉬웠던 덕에 빨리 자게 됐다.
코드는 이렇게 짰다.
#include <iostream> #include <numeric> #include <vector> using namespace std; int main(void) { int c = 0, n = 0; cin >> c; for (int t = 0; t < c; t++) { int count = 0; cin >> n; vector<int> scores; for (int i = 0; i < n; i++) { int score = 0; cin >> score; scores.push_back(score); // 차례차례 입력받아 배열에 넣어줌 } double avg = accumulate(scores.begin(), scores.end(), 0.0) / scores.size(); // vector의 원소들을 더해주는 std::accumulate 함수 while (!scores.empty()) { int back = scores.back(); scores.pop_back(); if (back > avg) count++; // 정수를 한개씩 뽑으면서 평균보다 크다면 count 증가 } printf("%.3lf%%\n", (double)count / n * 100.0); // %로 바꿔서 출력 } return 0; }