1. 문제 상세
https://www.acmicpc.net/problem/1546
2. 문제 접근
입력받은 점수들을 다시 계산한 후 그 점수들의 평균을 구하는 문제이다.
반복문으로 점수들을 입력받고 점수들을 계산, 점수들을 더한 다음 과목 수만큼 나누면 된다.
그리고 추가 조건으로 오차가 10-2 이하여야 한다.
따라서 점수와 평균을 저장 할 변수는 실수형 float 이나 double 등으로 선언하자.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
double score[1000], ave = 0, max = 0;
int n;
cin >> n;
for(int i = 0; i < n; i++) cin >> score[i];
for(int i = 0; i < n; i++) if(score[i] > max) max = score[i];
for(int i = 0; i < n; i++) score[i] = score[i] / max * 100;
for(int i = 0; i < n; i++) ave += score[i];
cout << ave / n;
}
크기가 1000인 실수형 배열 score 를 선언. 실수형 변수 ave 와 max 를 선언하고 0으로 초기화.
정수형 변수 n 을 선언.
cin 으로 과목 수를 입력받아 n 에 저장.
for문을 사용하여 i 가 0부터 n 보다 작을 때 1씩 더하며 반복한다.
반복에서는 cin 으로 점수를 입력받아 배열 score 의 i 번 인덱스에 저장한다.
위의 반복이 끝나면 다시 for문을 사용하여 i 가 0부터 n 보다 작을 때 1씩 더하며 반복한다.
반복에서는 if문으로 score 배열 i 번 인덱스의 값이 max 의 값보다 크면 max 에 score 배열 i 인덱스의 값을 저장한다.
위의 반복이 끝나면 다시 for문을 사용하여 i 가 0부터 n 보다 작을 때 1씩 더하며 반복한다.
반복에서는 score 배열 i 번 인덱스의 값을 max 로 나누고 100을 곱한값으로 저장한다.
위의 반복이 끝나면 다시 for문을 사용하여 i 가 0부터 n 보다 작을 때 1씩 더하며 반복한다.
반복에서는 ave 에 score 배열 i 번 인덱스의 값을 더한다.
마지막으로 cout 으로 ave 를 n 으로 나눈 값을 출력한다.
4. 성능 확인
5. 마무리
실수형 변수를 사용할 때 오차 범위를 잘 생각하자
float 의 오차범위는 약 10-6 정도이고
double 은 10-15 정도이다.
'백준 - 단계별로 풀어보기 > 1차원 배열' 카테고리의 다른 글
[백준] 3052번 : 나머지 | C++ (0) | 2023.09.22 |
---|---|
[백준] 10811번 : 바구니 뒤집기 | C++ (0) | 2023.09.22 |
[백준] 5597번 : 과제 안 내신 분..? | C++ (0) | 2023.09.21 |
[백준] 10813번 : 공 바꾸기 | C++ (0) | 2023.09.21 |
[백준] 10810번 : 공 넣기 | C++ (0) | 2023.09.21 |