23.06.26 재채점 결과 반영
이전에는 맞았지만 재채점후 틀린 이유는 https://www.acmicpc.net/board/view/119087때문이다.
따라서 반올림 함수인 round()를 이용하여 다시 풀었다.
문제설명
소스코드
#include<iostream>
#include<cmath> //round 함수를 쓰기위해
using namespace std;
int main()
{
int tmp; int N;
cin >> N;
tmp = N;
for (int i = 0; i < tmp; ++i)
{
cin >> N;
int* arr = new int[N]; //동적할당
float avg = 0;
int count = 0; //평균을 넘는 사람의 수를 저장
for (int j = 0; j < N; ++j) { cin >> arr[j]; avg += arr[j]; } //입력받고 avg에 더함
avg = avg / N; // 평균을 구함
for (int j = 0; j < N; ++j) if (arr[j] > avg) ++count; //평균을 넘는 사람을 증가시킴
float ans = ((float)count / N) * 100000;
ans = round(ans);
ans /= 1000;
cout << fixed; //소수점 고정
cout.precision(3); //소수점 아래 3자리까지 표현
cout << ans << "%" << endl;
delete[]arr; //메모리 해제
}
}
풀이
- 학생 수가 몇명인지 입력 받고, 그 숫자만큼 배열을 동적할당
- 배열에 점수를 입력받고 바로 avg에 더함
- avg변수의 값을 학생 수 만큼 나눔(평균을 구함)
- 배열을 돌면서 평균보다 높은 학생을 찾으면 count를 증가시킴
- 소수점 이하 4째 자리에서 반올림을 위해 (count / N) * 100000을 하고 round()함수를 호출하고 다시 1000으로 나눈다.
- fiexd로 소수점을 고정시키고, precision(3)으로 소수점 아래 3자리까지만 출력함
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 20단계 - 18258번 문제 (큐 2) (0) | 2023.07.10 |
---|---|
[C++] 백준 - 10845번 문제 (큐) (0) | 2023.06.26 |
[C++] 백준 12단계 - 2231번 문제 (분해합) (0) | 2023.06.25 |
[C++] 백준 12단계 - 2798번 문제 (블랙잭) (0) | 2023.06.25 |
[C++] 백준 19단계 - 18028번 문제 (스택) (0) | 2023.06.25 |