백준 1546번. 평균 C언어

굥지·2023년 1월 26일
0

백준

목록 보기
6/7

❓문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

✏️입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

⌨️출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.


예제 입력1

3
40 80 60

예제 출력1

75.0


예제 입력2

3
10 20 30

예제 출력2

66.666667


💻코드

#include<stdio.h>
#include <stdlib.h>
int main() {
    int N, M;
    float sum = 0, result = 0;

    scanf("%d", &N);
    float* a = malloc(sizeof(int) * N);

    for (int i = 0; i < N; i++) {
        scanf("%f", &a[i]);
    }

    M = a[0];
    for (int i = 0; i < N; i++) {
        if (a[i] > M) {
            M = a[i];
        }
    }

    for (int i = 0; i < N; i++) {
        result = a[i] / M * 100.0;


        sum = sum + result;
    }
    sum = sum / N;
    printf("%.2f", sum);
}

✍️풀이

처음 문제를 잘못 이해해서 점수/최댓값으로 풀고, 뭔가 이상해서 다시 읽어봤더니 점수/최댓값100을 출력해야한다더라.. 그래서 다시 풀어봤다.
먼저 시험 본 과목의 개수를 N으로 입력받아주고, N만큼 반복하여 a배열에 시험 점수를 입력받아준다. 배열을 선언할 때, 입력받은 수만큼의 크기로 지정해주기 위해 malloc(sizeof(int)
N)로 해줬다.
이때 배열을 float로 입력을 받아줘서 결과값이 실수로 나오도록 해줘야하는데 이걸 안 해줬어서 한참동안 이상하게 출력돼서 헤맸다는,,,
최댓값을 M에 대입하기 위해 배열에 있는 수를 모두 비교해서 M에 넣어준다
그러고 result에 점수/최댓값*100한 값을 넣어주고 sum이라는 변수에 차곡차곡 더해준 후 평균을 출력해주면 끝~

0개의 댓글

관련 채용 정보