본문 바로가기

백준 문제 풀이/c언어

백준 1546번 "평균" --- c

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. 해결 방법

  1. 최대 점수를 찾습니다.
  2. 모든 점수를 최대 점수로 나눈 후 100을 곱하여 점수를 조정합니다.
  3. 조정된 점수들의 평균을 계산합니다.

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