내 멋대로 코딩 풀이
[C/C++] BOJ 문제번호 1546 평균
우리집공돌이곰돌을좋아해
2021. 7. 14. 13:01
반응형
코딩을 하기 앞서 문제에서 준 조건을 읽어봤을 때, 세가지 과정이 필요함을 알 수 있다.1. 입력된 값중에 가장 큰 값 찾기2. 가장 큰 값을 M이라 두었을 때, 모든 값을 (점수/M)*100으로 바꾼다.3. 수정된 값을 이용하여 산술평균을 구한다.평균을 구하면서 나눗셈 연산이 들어가기 때문에, double형으로 점수 입력 배열을 선언했다. 입력받을 수 있는 과목의 최대 수는 1,000이므로 배열의 크기 또한 1,000으로 만들었다. 최대값을 탐색하는 과정은 먼저 최대값을 0으로 초기화 한 후, 배열의 첫번째 원소부터 마지막 원소까지 탐색했다. 만약 최대값과 해당 원소의 크기를 비교했을 때, 해당 원소의 값이 클 경우 최대값을 해당 원소 값으로 초기화 해준다. 최대값을 찾은 이후에는 위의 "(점수/M)*100" 식을 이용하여 저장되어 있는 배열의 값을 모두 바꿔 준 후 우리가 아는 산술평균 값을 구하면 정답이 나오게 된다.
#include <iostream>
#define MAX 1000
double solution(double arr[], int N) {
int max_val = 0;
int i;
double answer = 0.0;
for (i = 0; i < N; i++)
if (max_val <= arr[i])
max_val = arr[i];
for (i = 0; i < N; i++) {
arr[i] = arr[i] / max_val * 100;
answer += arr[i];
}
answer /= N;
return answer;
}
int main() {
int N, i;
double score[MAX] = { -1, };
double answer = 0;
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%lf", &score[i]);
answer = solution(score, N);
printf("%lf", answer);
}
반응형