728x90

문제

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

 

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

 

예제 입력 1 

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

 

예제 출력 1 

40.000%
57.143%
33.333%
66.667%
55.556%

 

출처

Contest > Waterloo's local Programming Contests > 28 September, 2002 D번

  • 문제를 번역한 사람: busyhuman
  • 문제의 오타를 찾은 사람: choiking10, eric00513
  • 어색한 표현을 찾은 사람: djm03178

 

알고리즘 분류

  • 수학
  • 사칙연산

 

문제 출처

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 


 

문제 해결 방법

  • 문제의 조건만 잘 파악하면 쉽게 해결할 수 있는 문제였다.
    • 우선 테스트 케이스의 개수(C)의 값을 입력 받는다.
    • 그리고 for 문을 이용하여 C번의 반복이 수행되도록 한 후, 학생의 수인 N의 값을 입력 받는다.
    • 그리고 또 다른 for 문을 이용하여 N의 개수 만큼의 성적을 받고, 이를 토대로 평균값(avg)을 구한다.
    • 또 다른 for 문을 이용하여 학생들의 성적이 포함되어 있는 N 크기의 배열을 순회하면서, 평균값(avg) 보다 큰 수의 개수(count)를 파악한 후, 또 다른 평균값을 구한다.
      • 이 때, 소수점 셋째 자리까지 출력하라는 문제의 조건을 만족시키기도록 한다.
        • cout << fixed; cout.precision(3);
      • 또한, 평균값이 부동 소수점 형으로 표현되도록, int 형으로 선언한 count 변수의 자료형을 명시적 형변환을 이용하여 double 형으로 바꾼다.
        • (double)count
    • 이러한 과정이 C번 반복되도록 한다.

 

코드

#include <iostream>
using namespace std;

#define S 1000

int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    int C, N, count;
    double sum, avg, score[S];

    cin >> C;

    for (int i = 0; i < C; i++) {
        cin >> N;
        
        count = 0;
        sum = 0;

        for (int j = 0; j < N; j++) {
            cin >> score[j];
            sum += score[j];
        }

        avg = sum / N;

        for (int k = 0; k < N; k++) {
            if (score[k] > avg) {
                count++;
            }
        }
        
        avg = (double)count / N;    // from integer to double

        cout << fixed;
        cout.precision(3);    // Fix Precision

        cout << avg * 100 << "%" << '\n';
    }

    return 0;
}

 

채점 결과

 

참고

  • [단계별로 풀어보기] > [1차원 배열]

 

소수점 이하 자릿수 개수 조절하기

  • 다음과 같이 cout 으로 출력할 때, 원하는 만큼 소숫점 이하의 수가 출력되도록 할 수 있다.
cout << fixed;
cout.precision(number);

 

728x90

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ-11654][C++] 아스키 코드  (0) 2022.07.11
[BOJ-1065][C++] 한수  (0) 2022.07.11
[BOJ-4673][C++] 셀프 넘버  (0) 2022.07.11
[BOJ-15596][C++] 정수 N개의 합  (0) 2022.07.11
[BOJ-8959][C++] OX퀴즈  (0) 2022.07.10
[BOJ-1546][C++] 평균  (0) 2022.07.10
[BOJ-3052][C++] 나머지  (0) 2022.07.10
[BOJ-2577][C++] 숫자의 개수  (0) 2022.07.10