안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.
이번 글은 백준 알고리즘 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);
}
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘/BOJ] 2163번 초콜릿 자르기(C언어) (0) | 2019.05.10 |
---|---|
[백준 알고리즘/BOJ] 1110번 더하기 사이클(C언어) (0) | 2019.03.30 |
[백준 알고리즘/BOJ] 4344번 평균은 넘겠지(C언어) (0) | 2019.03.29 |
[백준 알고리즘/BOJ] 10871번 X보다 작은 수(C언어) (0) | 2019.03.28 |
[백준 알고리즘/BOJ] 11721번 열 개씩 끊어 출력하기(C언어) (0) | 2019.03.26 |
[백준 알고리즘/BOJ] 11720번 숫자의 합(C언어) (2) | 2019.03.25 |
[백준 알고리즘/BOJ] 10817번 세 수(C언어) (0) | 2019.03.24 |
[백준 알고리즘/BOJ] 15552번 빠른 A+B(C언어) (0) | 2019.03.23 |
최근댓글