728x90
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
1. 문제 개요
백준 1546번은 기존에 받은 점수들을 조정하여 새로운 평균을 구하는 문제입니다. 이 문제를 통해 배열과 반복문, 그리고 기본적인 수학 계산에 대한 이해를 높일 수 있습니다.
2. 문제
주어진 N개의 점수 중 최대 점수를 M이라고 할 때, 모든 점수를 점수/M*100으로 바꾸는 것입니다. 예를 들어, 3개의 점수가 각각 10, 20, 30이라면, 최대 점수인 30으로 나누고 100을 곱하여 점수를 조정합니다. 이렇게 조정한 점수들의 평균을 구하는 것이 문제의 목표입니다.
3. 문제 조건
- 입력: 첫째 줄에 과목의 개수 N이 주어지고, 둘째 줄에는 현재 성적이 주어집니다.
- 출력: 첫째 줄에 새로운 평균을 출력합니다. 실제 정답과의 절대 오차나 상대 오차가 10^-2 이하이면 정답으로 인정됩니다.
4. 예시 입출력
- 입력:
3 40 80 60
- 출력:
- 75.0
5. C언어 풀이
5-1. 해결 방법
- 최대 점수를 찾습니다.
- 모든 점수를 최대 점수로 나눈 후 100을 곱하여 점수를 조정합니다.
- 조정된 점수들의 평균을 계산합니다.
5-2. 코드
#include <stdio.h>
int main() {
int N;
scanf("%d", &N); // 과목의 개수 입력 받기
double scores[N], max = 0, sum = 0;
for(int i = 0; i < N; i++) {
scanf("%lf", &scores[i]); // 점수 입력 받기
if(scores[i] > max) {
max = scores[i]; // 최대 점수 갱신
}
}
for(int i = 0; i < N; i++) {
scores[i] = scores[i] / max * 100; // 점수 조정
sum += scores[i]; // 조정된 점수 합산
}
printf("%.2f\n", sum / N); // 새로운 평균 출력
return 0;
}
5-3. 코드 해설
- 이 코드는 우선 사용자로부터 과목의 개수
N
을 입력 받습니다. scores
배열에 각 과목의 점수를 저장하면서 동시에 최대 점수max
를 갱신합니다.- 모든 점수를 최대 점수로 나누어 조정한 후, 조정된 점수들의 합
sum
을 구합니다. - 마지막으로 조정된 점수들의 평균을 출력합니다.
6. 마무리
이 문제는 프로그래밍의 기본적인 요소를 활용하여 해결할 수 있으며, 배열과 반복문, 조건문의 사용법을 잘 이해할 수 있는 좋은 예제입니다. 문제를 해결하면서 C언어의 기본적인 문법뿐만 아니라, 문제 해결 능력도 함께 향상시킬 수 있습니다.
728x90
'백준 문제 풀이 > c언어' 카테고리의 다른 글
백준 1436번 "solved.ac" --- c (0) | 2024.03.25 |
---|---|
백준 1436번 "영화감독 숌" --- c (1) | 2024.02.29 |
백준 1018번 "체스판 다시 칠하기" -- C (1) | 2024.02.27 |
백준 25083 C언어 문제 풀이 - 새싹 (0) | 2024.01.28 |
백준 10989 C언어 문제 풀이 - 수 정렬하기 3 (0) | 2024.01.28 |