(백준)1546번 평균 문제 풀기

DevSeoRex·2022년 6월 7일
0

백준

목록 보기
8/12

시험 본 과목 개수를 입력받고 , 시험 점수 중 가장 큰 값을 구한 뒤 (시험점수/가장 잘 본 점수) * 100 을 해서 점수를 조작(?)하라는 문제이다.

Step1.

Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int[] arr = new int[a];
		double[] arr2 = new double[a];
		double total = 0;
		for(int i=0; i<arr.length; i++) {
			arr[i] = sc.nextInt();
			arr2[i] = (double)arr[i];
		}

정수의 개수 a를 입력받고, 시험 점수를 입력받을 배열 arr을 선언한다.
변환된 시험점수를 입력받을 배열 arr2를 선언하고, 변환된 시험점수의 총점을 저장할 total 변수를 선언했다.

for문 안에서 arr에 숫자를 입력받고, arr2에 arr 배열에 들어있는 정수 값을 double형으로 형변환하여 arr2에 입력한다.

Step2.

OptionalInt opt = Arrays.stream(arr).max();
		int max = opt.getAsInt();
		for(int i=0; i<arr2.length; i++) {
			arr2[i] = (arr2[i]/max)*100;
			total += arr2[i];
		}

Arrays.stream.max() 메서드를 이용해 배열에서 가장 큰 값을 찾아 max에 저장하고, arr2에 시험점수(arr2[i])/최고점수(max) x 100 을 해준 값을 저장한다.
total에 저장한 값을 하나씩 더해서 누적시킨다.

Step4.

System.out.println(total/a);

누적된 값 total을 정수의 개수 a로 나눠서 출력해준다.

전체 코드

import java.util.Arrays;
import java.util.OptionalInt;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int[] arr = new int[a];
		double[] arr2 = new double[a];
		double total = 0;
		for(int i=0; i<arr.length; i++) {
			arr[i] = sc.nextInt();
			arr2[i] = (double)arr[i];
		}		
		OptionalInt opt = Arrays.stream(arr).max();
		int max = opt.getAsInt();
		for(int i=0; i<arr2.length; i++) {
			arr2[i] = (arr2[i]/max)*100;
			total += arr2[i];
		}				
		System.out.println(total/a);		
	}
}

0개의 댓글