본문 바로가기
코딩테스트/programming_C++

baekjoon #4344_평균은 넘겠지_c+

by prometedor 2021. 10. 25.
  • 소수점 표현

cout<<fixed  // 소숫점 아래 값을 고정하는 표현

--> cout.setf(ios::fixed); 로 사용할 수 있음 (setf는 설정을 해주는 표현 / unsetf는 설정을 해제하는 표현)

precision(3)  // cout<<fixed; 와 함께 사용 시 소수점 아래 3으로 고정

precision(3) 만 사용 시, 자리수 설정

ex) 12.3456를 precision(3) 하면, 12.3 출력

12.3456를 cout<<fixed; cout.precision(3); 하면, 12.345 출력

 

#include<iostream>

int main() {
int C,N,cnt,sum,avg;
int score[1000] = {};
double result;

std::cin >> C;

for (int i = 0; i < C; i++) {
cnt = 0, sum = 0, avg = 0;
std::cin >> N;

for (int j = 0; j < N; j++) {
std::cin >> score[j];
sum += score[j];
}
avg = sum / N;
for (int j = 0; j < N; j++) {
if (score[j] > avg)
cnt++;
}
result = (double)cnt / N * 100;

std::cout.setf(std::ios::fixed);
std::cout.precision(3);
std::cout << result << "%\n";
}

}

C 는 케이스 개수

N 은 학생의 수

cnt 는 평균을 넘는 학생의 수

sum 은 학생들의 모든 점수의 합

avg 는 학생들의 모든 점수의 평균 -> sum / N

score[1000] 은 크기가 1000인 배열 -> 학생의 수가 1명 이상 1000명 이하이므로 배열의 크기를 1000으로 잡음

result 는 점수가 평균 이상인 학생들의 비율 -> cnt / N * 100

 

 

ex) C=2 이고, 입력 값이 아래와 같을 경우,

2

5 50 50 70 80 100

7 100 95 90 80 70 60 50

 

i=0 , N=5

score[i] 점수 평균을 넘는지 여부
score[0] 50 F
socre[1] 50 F
socre[2] 70 F
socre[3] 80 T
socre[4] 100 T

sum = 50 + 50 + 70 + 80 + 100 = 350

avg = 350 / 5 =70

평균을 넘는 학생 수 3명 -> cnt = 2

평균을 넘는 학생의 비율 -> result = cnt / N * 100 = 2 / 5 * 100 = 40

result는 double형으로 정의되었고, 반올림하여 소수점 셋째 자리까지 출력해야하므로, 

std::cout.setf(std::ios::fixed);
std::cout.precision(3); 

을 사용하여 40.000을 출력

 

i=1 , N=7

score[i] 점수 평균을 넘는지 여부
score[0] 100 T
socre[1] 95 T
socre[2] 90 T
socre[3] 80 T
socre[4] 70 F
socre[5] 60 F
socre[6] 50 F

sum = 100 + 95 + 90 + 80 + 70 + 60 + 50 = 545

avg = 545 / 7 = 77.85714285714286 ..... -> int형 므로 

평균을 넘는 학생 수 3명 -> cnt = 4

평균을 넘는 학생의 비율 -> result = cnt / N * 100 = 4 / 7 * 100 = 57.14285714285714 .....

result는 double형으로 정의되었고, 반올림하여 소수점 셋째 자리까지 출력해야하므로, 

std::cout.setf(std::ios::fixed);
std::cout.precision(3); 

을 사용하여 57.143을 출력