백준/C++

[백준] 4344번: 평균은 넘겠지 | C++ 풀이

성실한 당근농부 2023. 5. 23. 09:20

# 문제

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

 

 


 

# 풀이

왜 슬픈 진실을 알아야만 하죠.

어렵지 않은 문제다. 앞서 했던 것들을 잘 떠올려보자.

오늘도 바로 정답 소스코드 확인!

 

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);    // 두 표준 입출력 동기화 해제 
    cin.tie(NULL);    // 입력과 출력 묶음을 풀기
    
    int testCase, n, score;
    cin >> testCase;
    
    while(testCase--){
        cin >> n;
        int score[n];

        // step 1. 평균 구하기
        int sum = 0;
        for(int i=0; i<n; i++){
            cin >> score[i];
            sum += score[i];
        }
        double average = sum/n;
        
        // step 2. 평균을 넘는 학생의 수 구하기
        double cnt = 0;
        for(int i=0; i<n; i++){
            if(score[i] > average) cnt++;
        }
        
        // step 3. 평균을 넘는 학생의 비율을 구해 출력
        cout.precision(3);
        cout << fixed;
        cout << cnt/(double)n * 100 << '%' << '\n';
    }
    
    return 0;
}

 

평균을 구할 때도, 평균을 넘는 학생의 수를 구할 때도 점수가 필요하기 때문에 점수는 배열을 만들어 담아주었다.

그리고 문제에서 요구하는대로 단계를 나누어 구현했는데, STEP 1부터 살펴보자.

 

 

 

📌STEP 1. 평균 구하기 

// step 1. 평균 구하기
int sum = 0;
for(int i=0; i<n; i++){
    cin >> score[i];
    sum += score[i];
}
double average = sum/n;

심화 1단계를 풀고 있는 사람이라면 평균 정도는 가뿐하게 구할 수 있으리라 생각한다.

이때 주의해야 할 것은 평균 값이 항상 정수가 아니므로 double로 받아주어야 한다는 것이다.

 

 

 

📌STEP 2. 평균을 넘는 학생의 수 구하기 

// step 2. 평균을 넘는 학생의 수 구하기
double cnt = 0;
for(int i=0; i<n; i++){
    if(score[i] > average) cnt++;
}

평균을 넘는 학생의 수를 세어줄 cnt 변수를 만들고 0으로 초기화 해준다.

cnt는 이후 평균을 넘는 학생의 비율을 구할 때도 필요하기 때문에 형변환을 염두해 double로 만들어주었다.

그리고 점수 배열을 탐색하며 구해둔 평균 값을 넘는 학생의 수를 세어주면 2단계도 간단하게 끝난다.

 

 

 

📌STEP 3. 평균을 넘는 학생의 비율을 구해 출력

// step 3. 평균을 넘는 학생의 비율을 구해 출력
cout.precision(3);
cout << fixed;
cout << cnt/(double)n * 100 << '%' << '\n';

문제에서 요구한 출력 값은 다음과 같다.

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

 

 

만약 소수점 셋째자리까지 출력하기 위한 코드(line 30-31)를 생략할 경우에는 아래와 같은 출력 값이 나오게 된다.

 

따라서 우리는 소수점 출력 형식을 지정해주어야 하는데, 이에 대해 들어본 적이 없다면 아래의 글을 참고해 1008번 문제를 풀어보고 오길 권한다. 해당 개념이 사용된 문제 풀이와 추가 설명을 함께 적어두었다.

 

[백준] 1008번: A/B | C++ 풀이

# 문제 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. # 풀이 앞서 더하고 빼는 문제를 풀다가 풀었더니... 처음엔 당당하게 A/B 적고 틀렸다! 이 문제를 풀이할 땐 실제 정

carrot-farmer.tistory.com

 

이미 학습이 되어 있는 분들이라면 cout.precision(3)을 통해 소수점 셋째 자리까지 출력되도록 지정해주고,

cout.fixed를 통해 고정 소수점 표기법으로 변경 후 비율을 구해 출력해주면 끝이다.

선언해준 변수의 타입과 형변환에 유의해 풀이하고, 출력 형태를 다시 한번 잘 확인하자.

 

 

 

 


 

 

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

 

728x90