반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

이번 글은 백준 알고리즘 1546번 평균 C언어 문제입니다.



1. 문제

세준이는 기말고사를 망쳤다.

세준이는 점수를 조작해서 집으로 가져가기로 했다.

일단 세준이는 자기 점수 중에 최댓값을 골랐다.

이 값을 M이라고 한다.

그리고 나서 모든 점수를 점수/M*100으로 고쳤다

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

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



2. 입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 

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

3
40 80 60
3
10 20 30
4
1 100 100 100
5
1 2 4 8 16
2
3 10



3. 출력

첫째 줄에 새로운 평균을 출력한다. 정답과의 절대/상대 오차는 10^-2까지 허용한다.

75.00
66.666667
75.25
38.75
65.00



4. 풀이

이 문제를 푸는데 조금 시간이 걸렸습니다.

문제점은 scanf로 값을 입력받을 때, double형으로 받아야 하는데 계속 int형으로 받고 있었습니다!

문제 푸는 방법은 다음과 같습니다.

1) N값 입력 받기

2) N값에 맞는 double형 배열 선언 및 변수 선언

3) 배열값 입력 받기

4) 배열값 중 최댓값 찾기

5) 공식을 사용하여 sum값 구하기

6) 형에 맞는 값 출력


5. 소스 코드

#include<stdio.h>

int main()

{

int N; // 시험 본 과목의 갯수

double MAX=0.0; // 최댓값

scanf("%d",&N); // 시험 본 과목의 갯수 입력 

double A[N]; // 시험 본 과목 크기의 배열 생성 

double sum=0.0; 

for(int i=0;i<N;i++) scanf("%lf",&A[i]); // 점수값 넣기 

for(int i=0;i<N;i++)

{

if(A[i]>MAX) MAX = A[i]; // 최댓값 찾기 

}

for(int i=0;i<N;i++)

{

sum = sum + ((A[i]/MAX)*100.0);

}

printf("%0.2lf",sum/N);

}

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기