002. 평균 구하기(백준1546번)

Daniel·2023년 11월 16일
0

문제

분석하기

시간제한 2초 = 2억번의 연산 안에 해결해야한다.

첫번째 줄 = 과목수
두번째 줄 = 각 과목 점수

각 과목 점수 중 최대값을 M 으로 칭하고 모든 점수를 점수/M100점수/M*100 연산을 통해 새로운 점수로 고친 후 새로운 평균을 구해야 한다.

입력받은 점수를 배열에 저장한다.
입력받은 점수 중 최댓값을 M에 저장해야한다.
모든 점수가 저장된 배열을 순회하며 점수/M100점수/M*100 연산을 수행 후 최종값을 배열의 길이로(과목수) 나누어야 새로운 평균이 나온다.

Ex) 과목수가 3개 라면?
점수1/M100==점수100/M점수1 / M * 100 == 점수 * 100 / M
(점수1/M100+점수2/M100+점수3/M100)/3(과목수)===(점수1+점수2+점수3)100/M/3(과목수)(점수1/M*100 + 점수2/M*100 + 점수3/M*100) / 3(과목 수) === (점수1 + 점수2 + 점수3) * 100 / M / 3(과목수)

슈도코드 작성

long N = 과목 수
long[] numArr = 길이가 N인 배열 선언 및 초기화
long M = 최고점 저장
long total = 모든 점수 누적합

for(int i=0; i<numArr.length; i++) {
	numArr[i] = 과목 점수들 입력받기
}

for(numArr 순회) {
	if(M < numArr[i]) M = numArr[i]
	total += numArr[i]
}

// 실수 타입으로 반환해야 한다.
avg = total / M * 100.0 / N

코드 구현하기

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.util.StringTokenizer;  
public class Main {  
  
	public static void main( String[] args ) {  
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));  
		StringTokenizer st = new StringTokenizer(br.readLine());  
		
		long N = Integer.parseInt(st.nextToken()); // 과목 수 입력 받기  
		long[] numArr = new long[(int)N]; // 길이가 N인 배열 선언  
		long M = 0;  
		long total = 0;  
		
		st = new StringTokenizer(br.readLine());  
		for (int i = 0; i < numArr.length; i++) {  
			numArr[i] = Integer.parseInt(st.nextToken());  
		}  
	  
		for (long i : numArr) {  
			if (M < i)  M = i;  
			total += i;  
		}  
	  
		bw.write(total * 100.0 / M / N + "\n");  
		bw.flush();  
		bw.close();
	}  
} // end
profile
응애 나 애기 개발자

0개의 댓글