반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-18 06:40
관리 메뉴

ImJay

[C언어] 백준 1546번 : 평균 본문

백준 - C, C++/05. 1차원 배열

[C언어] 백준 1546번 : 평균

ImJay 2020. 9. 29. 00:00
반응형

백준 1546번 : 평균

- 사용언어 : C언어

www.acmicpc.net/problem/1546

1. 문제

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

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

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

2. 코드

#include <stdio.h>
#include <limits.h>

int main (void) {
    
    int input; 
    double sum;
    double max=INT_MIN;
    
    scanf("%d", &input);
    
    double sc[input];
    
    for(int i=0; i<input; i++) {
        scanf("%lf ", sc+i);
        if (sc[i] > max) max = sc[i];
        }
    
    for(int i=0; i<input; i++) {
        sc[i] = (sc[i]/max)*100;
        sum += sc[i];
    }
    
    printf("%.2lf", sum/input);
    
}

3. 풀이

int형 변수 input은 과목의 개수 N입니다.

 

double형 변수 sc[input]은 점수이며, sum은 점수의 합입니다.

 

정수로 받음에도 double로 선언해준 까닭은 계산 중(최댓값으로 나누면) 소수점이 나올 수 있기 때문입니다.

 

이와 같은 이유로 최댓값 max도 double형으로 선언했습니다.

 

과목의 개수를 알 수 없기 때문에 input을 먼저 받고, sc[input]을 선언해주었습니다.

 

최댓값 또한 알 수 없기 때문에 max는 INT_MIN으로 지정해주었으며

 

이 때, <limits.h> 헤더파일을 포함해주어야 합니다.

 

max를 INT_MIN, 즉 최솟값으로 설정해야 하는 이유는 처음 받는 sc[i] 값을 최댓값으로 지정하기 위함입니다.

 

처음의 sc[0]이 max로 지정되어야, 나머지 sc[1], sc[2], ... 와 정상적으로 값을 비교할 수 있기 때문입니다.

 

1) for문으로 sc[i]의 값을 받고, 미리 선언해준 max(INT_MIN, 최솟값)와 비교하여 최댓값 max를 정합니다.

 

2) for문으로 sc[i]의 연산을 통해 문제에서 원하는 점수의 값을 구하고, 이를 sum에 더하여 점수의 합을 구해줍니다.

 

3) 마지막으로, sum/input을 출력하여 조작된 점수의 평균을 구합니다.

 

%.2lf에서 %.2는 소숫점 둘째자리까지만 나타내도록 합니다.

 

반응형
Comments