C언어/BAEKJOON
[백준] 4344. 평균은 넘겠지
너굴맨이해치움
2022. 8. 11. 22:02
: solved.ac - bronze 1
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
예제 입력
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
예제 출력
40.000%
57.143%
33.333%
66.667%
55.556%
정답
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int c, n;
double over, total, rate;
int std[1000] = { 0 };
scanf("%d", &c);
for (int i = 0; i < c; i++) {
scanf("%d", &n);
over = 0;
total = 0;
rate = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &std[i]);
total += std[i];
}
total /= n;
for (int i = 0; i < n; i++) {
if (std[i] > total) over++;
}
rate = over / n;
printf("%.3lf%%", rate * 100);
}
return 0;
}
해설
- for문을 돌려 총합을 구한다.
- 총합을 학생 수로 나누어 평균을 구한다.
- for문을 한 번 더 돌려 평균을 넘는 학생의 수를 센다. (이상이 아니라 초과임에 유의한다.)
- (평균을 넘는 학생의 수/전체 학생 수)에 100을 곱하여 % 기호를 붙여서 출력한다.
1. 위처럼 간단한 풀이법으로 풀 수 있으나, 이 문제에서 유념할 부분이 두 가지 있다.
하나는 자료형이다. 계산 중 정수형과 실수형이 혼재되면 소숫점 아래가 잘린 값이 저장되는 등의 자료 유실이 발생할 수 있다. 저장되는 자료의 형태에 따라 자료형을 올바르게 쓰는 것은 물론, 결과값이 실수로 나와야 할 경우 계산하는 수 또한 실수형이어야 함에 유념한다. (특히 나눗셈)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int c, n;
double over, total, rate;
int std[1000] = { 0 };
scanf("%d", &c); //테스트케이스 개수 입력
for (int i = 0; i < c; i++) {
scanf("%d", &n); //학생 수 입력
2. 두 번째로는 출력 양식이다. %.3을 쓰면 소숫점 셋째 자리 수까지 출력할 수 있음은 기본이고,
% 기호가 출력값에 보이도록 출력하려면 %%와 같이 두 번 겹쳐 써야 한다는 점도 복기해 둔다.
over = 0;
total = 0;
rate = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &std[i]); //성적 입력
total += std[i]; //총합 계산
}
total /= n; //평균 계산
for (int i = 0; i < n; i++) {
if (std[i] > total) over++;
//평균을 넘는 학생 수 도출
}
rate = over / n; //평균을 넘는 학생들의 비율
printf("%.3lf%%", rate * 100);
}
return 0;
}