


1. 각 케이스의 평균을 구한 후
2. 평균을 넘는 수의 학생 수를 비율로 나타내는 문제
풀이
#include <iostream>
using namespace std;
int main() {
int test, stu, sco[1000],avg=0; //테스트 케이스, 학생 수, 점수, 평균
double ans; //답
cin >> test;
for (int i = 0; i < test; i++) { //테스트 수 만큼 학생 수 입력
cin >> stu;
int sum = 0; //합계 초기화
for (int j = 0; j < stu; j++) { // 학생 수 만큼
cin >> sco[j]; // 점수 입력
sum += sco[j]; // 입력 받은 점수 sum에 더함
}
avg = sum / stu; //평균
double count = 0;
for (int j = 0; j < stu; j++) {
if (avg < sco[j]) // 점수가 평균보다 높을 시 count++
count++;
}
ans = (count / stu) * 100; //비율 계산
cout.precision(3);
cout << fixed; //소숫점 3자리까지만 출력
cout << ans<<"%"<<endl;
}
}
주의해야하는 부분이 몇 가지 있는 문제
1. 변수 초기화
2. 소숫점
을 주의하면서 풀어야하는 문제가 아닌가 싶다.
다중 for문을 사용하여 점수를 입력 받아 그 점수를 sum값에 계속 추가하여 평균을 구하였고
다음 for문에서는 점수와 평균을 비교하여 count를 1씩 추가하는 방식을 사용하였다.
이중 sum과 count의 초기화 시점이 주의해야한다고 생각하는데
cin >> test;
for (int i = 0; i < test; i++) {
cin >> stu;
int sum = 0;
for (int j = 0; j < stu; j++) {
cin >> sco[j];
sum += sco[j];
}
안쪽 for문을 실행하고 나면 sum에는 이미 값이 들어가 있기 때문에
초기화를 진행하지 않을 시 처음에 입력되어 있던 값에 또 값을 추가하게 된다.
이 부분을 해결하기 위해 for에 진입하기 전에 sum을 0값으로 초기화 해주는 방법을 사용하지만
반대로 for문을 빠져나간 뒤 초기화해도 괜찮다. count의 경우도 마찬가지.
마지막으로 주의할 점인 소숫점은 부분은
cout.precision(n);
cout << fixed;
을 사용하여 쉽게 해결이 가능하다
cout.precision(n); -> 자리를 조정하는 함수이며 ()안의 n의 값을 변경하여 원하는 값의 자리를 지정할 수 있고
cout << fixed; -> 소숫점 아래의 자리를 지정하는 값이다
즉
cout.precision(3);
cout << fixed;
을 사용하였다면 소숫점 아래 3자리를 출력한다는 명령으로 나타낼 수 있다.
'알고리즘 > 백준' 카테고리의 다른 글
<백준> 1110번 더하기 사이클 java 문제풀이 (0) | 2022.01.05 |
---|---|
<백준> 1712번 손익분기점 C++ 문제풀이 (0) | 2021.02.02 |
<백준> 2753번 윤년 C++ 문제풀이 (0) | 2021.01.08 |
<백준> 2884번 알람시계 C++ 문제풀이 (0) | 2021.01.07 |

IT
github : https://github.com/HanSungHyeon