https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
이번 문제는 학생들의 점수를 입력받아 평균을 구한 뒤, 이 중 평균을 넘는 학생의 비율을 구하는 것입니다.
문제의 키 포인트
1. 이전 문제와 동일하게 첫째 줄에는 테스트 케이스의 개수를 입력받는 점.
2. 둘째 줄에는 각 테스트 케이스마다 학생의 수와 함께 점수가 주어진다는 점.
3. 학생의 수 N의 범위는 1<=N<=1000, N은 정수.
4. 점수 M의 범위는 0<=M<=100, M은 정수.
5. 마지막 출력은 평균을 넘는 학생들의 비율이며 해당 비율은 반올림하여 소수점 셋째 자리까지 출력한다는 점.
해결방안
1. 테스트 케이스의 개수 입력받기
2. 해당 개수에 따라 테스트 케이스를 입력받는 반복문 실행하기
3. 테이스 케이스의 첫 값, 학생의 수 N 만큼 학생들의 점수 입력받는 반복문 실행하기
4. 입력받은 점수로 평균 구하기
5. 평균과 학생들의 점수를 비교해서 평균을 넘는 학생들의 수 구하기
6. 평균을 넘는 학생들의 수와 전체 학생의 수 N을 이용해 비율을 구하고 소수점 셋째 자리까지 반올림한 후 출력하기
순서도(FlowChart)
이번에는 저번 문제와 달리 출력부를 따로 나누지 않고 본문 반복문에서 바로 출력하도록 구성했습니다.
소스코드(SourceCode)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int input; // 테스트 케이스의 개수
int student; // 학생의 수
int grade[1000]; // 학생의 점수
int i, j, k; // 반복 변수
int sum; // 학생들의 점수 합계
double avg;
int count; // 평균을 넘은 학생 수
scanf("%d", &input); // 테스트 케이스 입력
for (i = 0; i < input; i++)
{
sum = 0;
avg = 0;
count = 0;
scanf("%d", &student); // 학생 수 입력
// 학생별 점수 입력부
for (j = 0; j < student; j++)
{
scanf("%d", &grade[j]);
sum += grade[j];
}
// 평균 계산부
avg = sum / student;
// 평균 이상인 학생의 수 계산부
for (k = 0; k < student; k++)
{
if (avg < grade[k])
{
count++;
}
}
// 평균 이상인 학생의 비율 출력부
printf("%.3lf%%\n", (double)count/student*100);
}
return 0;
}
느낀점
반복문과 조건의 개념을 명확히 이해하고 있다면 그렇게 어려운 문제는 아니었던 것 같습니다.
그럼 오늘도 즐거운 코딩!
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 4673, 셀프 넘버 (0) | 2021.07.02 |
---|---|
[C언어] Backjoon_Code 15596, 정수 N개의 합 (0) | 2021.07.01 |
[C언어] Backjoon_Code 8958, OX퀴즈 (0) | 2021.06.29 |
[C언어] Backjoon_Code 1546, 평균 조작하기 (0) | 2021.06.28 |
[C언어] Backjoon_Code 3052, 서로 다른 나머지 계산하기 (0) | 2021.06.27 |