2022. 3. 28. 23:49ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
접근 방법 - 수학적 연산이 필요한 문제
백준의 4344번 문제는 수학적 연산을 필요로 하는 문제이다.
해당 문제는, 각 테스트 케이스에서 입력받은 학생들의 점수를 통해 평균을 넘는 학생의 비율이 얼마인지를 출력해야 하는 문제이다.
평균을 구하는 과정과 백분율 계산법만 제대로 인지하고 있다면 어렵지 않게 풀 수 있을 것이다.
여기서, 예시 출력을 보면 모든 결괏값이 소수점 아래 3번째 자릿수까지 표현되어있는데 이는 아래의 구문을 사용하면 된다.
cout << fixed;
cout.precision(3);
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 테스트 케이스의 수(n)를 입력받는다.
2) n의 크기만큼 반복문을 실행하면서 아래의 연산을 취한다.
- 과목 수를 저장할 변수(num)와 각 점수를 저장할 배열(score)을 선언한다.
- num과 score의 배열값을 차례로 입력받는다. 여기서, sum 변수를 선언한 뒤 모든 점수의 합계도 함께 구한다.
- avr 변수를 선언한 뒤, 즉시 평균을 해당 변수에 저장한다.
- cnt 변수를 0으로 초기화하며 선언한 뒤, 평균을 넘는 학생의 수를 카운팅한다.
- 최종적으로 저장된 cnt/num에 100을 곱하여 백분율을 구한 뒤, "%"와 함께 출력한다.
3) 모든 테스트 케이스가 실행되었다면, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;
//백준 4344번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cout << fixed; cout.precision(3);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int num, score[1000] = { 0 };
cin >> num;
double sum = 0;
for (int j = 0; j < num; j++) {
cin >> score[j];
sum += score[j];
}
double avr = sum / num;
double cnt = 0;
for (int j = 0; j < num; j++) {
if (score[j] > avr) { cnt++; }
}
cout << (cnt / num) * 100 << "%" << endl;
}
}
제출 결과
(2022.03.25 백준 4344번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 2445번 별 찍기 - 8 (C++/cpp) (0) | 2022.03.31 |
---|---|
[백준 BOJ] 10989번 수 정렬하기 3 (C++/cpp) (0) | 2022.03.30 |
[백준 BOJ] 14681번 사분면 고르기 (C++/cpp) (0) | 2022.03.26 |
[백준 BOJ] 1874번 스택 수열 (C++/cpp) (0) | 2022.03.26 |
[백준 BOJ] 10926번 ??! (C++/cpp) (0) | 2022.03.25 |