문제 풀이

[백준] 1546번: 평균 - JAVA (자바)

auyeol 2023. 5. 23. 17:37
728x90

 

문제

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

 

1546번: 평균

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

www.acmicpc.net

 

과목의 개수 N을 입력 받은 뒤, M(과목의 점수)을 N번 입력한다. 이후, M의 최댓값을 이용하여 M의 값들을 변경하는 문제이다.

 

입력                                    출력
3					75.0
40 80 60

 

입력                                    출력
5					38.75
1 2 4 8 16

 

 

------------------------------------------------------------------------------------------------------------------

 

 

 

풀이

 

이전에 풀었던 최댓값 문제와 비슷한 것 같아서 전부 다 double로 선언하고 풀었더니 금방 풀렸던 것 같다. 

이게 맞는 방법인지는 모르겠지만....

 

과목의 수 n을 입력받은 뒤 

 

배열 score, 최댓값을 비교할 max, 총합을 구할 sum을 초기화했다.

 

for문을 선언하여 값들을 입력받은 뒤, max와 비교하여 큰 경우 max에 저장되게 설정하였다.

 

이후, 다시 for문에 주어진 계산식을 사용하여 배열의 값들을 변경해주고 sum에 값들을 저장하였다.

 

마지막으로 평균값을 계산하여 출력하게 만들었다. 

 

 

(1) Scanner 사용 

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt(); 
		double score[] = new double[n]; 
		double avg, max = 0,sum = 0;
		
		for(int i=0;i<score.length;i++) {
			score[i] = sc.nextInt(); 
			
			if(score[i]>max) 
				max = score[i]; 
		}
		
		for(int i=0;i<score.length;i++) {
			score[i] = (score[i]/max)*100;
			sum += score[i];
		}
		sc.close();
		
		avg = sum / n;
		
		System.out.println(avg);
		
		
		
	}
}

 

------------------------------------------------------------------------------------------------------------------

 

 

(2) BufferdReader 사용 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer strtk = new StringTokenizer(br.readLine()," ");
		
		int n = Integer.parseInt(strtk.nextToken());
		
		double score[] = new double[n]; 
		double avg, max = 0,sum = 0;
		
		strtk = new StringTokenizer(br.readLine());
		for(int i=0;i<n;i++) {
			score[i] = Double.parseDouble(strtk.nextToken());
			
			if(score[i]>max) 
				max = score[i]; 
		}
		
		for(int i=0;i<score.length;i++) {
			score[i] = (score[i]/max)*100;
			sum += score[i];
		}
		br.close();
		
		avg = sum / n;
		
		System.out.println(avg);
		
		
	}
}

 

 

Scanner

 

BufferedReader

728x90