티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 1546번 평균

https://www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

N개의 시험 과목 점수 중 최대값 M을 사용하여 점수를 수정한다.

각 점수는 '기존 점수 / M * 100' 으로 고치고 새로운 평균 점수을 출력한다.

실제 문제에는 더 많은 입출력 예시가 있습니다

 

2. 풀이

배열 카테고리에 속하는 문제인 만큼

입력받은 점수를 배열에 하나하나 기록하며 최대값을 찾아서 풀어도 됩니다.

 

하지만 그렇게 풀 경우 최대 4번의 반복이 필요합니다.

(1) 기록, 2) 최대값 찾기, 3) 점수 바꾸기, 4) 평균 계산 -> 물론 1, 2를 묶고 3, 4를 묶어서 2번에 처리할 수도 있습니다)

 

반복을 1회만 하려고 입력과 동시에 total 점수를 계산하며 max 값을 찾게 했고,

total 점수를 계산한 근거는 아래 수식입니다.

 

출력값은 소수점을 포함해야하므로

계산에 사용하는 100을 100.0(실수형)으로 맨 앞에 두었습니다.

 

3. 코드

#include <stdio.h>

int main() {
	int n, score;
	scanf("%d", &n);

	int max = 0;
	int total = 0;

	for (int i = 0; i < n; ++i) {
		scanf("%d", &score);
		total += score;
		if (score > max) {
			max = score;
		}
	}

	printf("%f\n", 100.0 * total / n / max);
	return 0;
}
728x90
반응형
댓글