Algorithm/Baekjoon

[Baekjoon] 백준 1546 평균 - java

담크 2021. 7. 18. 23:48

이번엔 1차원 배열 문제를 정리해보려고 합니다.

사실 제가 자바에서 무엇보다 어려워하는 게 배열 문제라 앞으로는 좀 많이 풀어보고 감을 좀 익혀보려고 합니다.

그래도 뭔가 이해가 잘 되는 느낌은 아니지만요... ㅎㅎ

문제는

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

 

1546번: 평균

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.


 

문제풀이

import java.util.Scanner;

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

 

이번 문제는 첫번째로 입력받은 수 중에서 최댓값을 먼저 뽑아내고 그 이후에 평균을 구하는 문제였습니다.

max = -1로 표시한 이유는 점수는 0점을 포함하고 있기 때문에 입력받을 값이 0보다 크거나 같을 수 있어서입니다.

이렇게 if문을 사용해서 최댓값을 max에 넣은 후 입력받은 모든 수를 더한 sum에서 나누어 주면 됩니다.

 

이번 문제는 문제를 보고 어떻게 풀어야겠다 가 수학적으로 먼저 떠오르는 문제였습니다 ㅋㅋㅋ 확실히 이런류의 문제들은 수학적으로 풀이를 만들어 놓고 구현하는게 저는 편한거같아요... (음... 앞으로는 수학을 열심히 해야되나....)

 

 

(sum / max) * 100이라는 수식은

입력받은 값이 A, B, C라고 했을 때 (max = C라고 가정)

(A/C) * 100 + (B/C) * 100 + (C/C) * 100 => ((A/C) + (B/C) + (C/C))* 100 => ((A + B + C)/C) * 100 이기 때문에 

결국 모든 수를 다 더한 (sum/max) * 100이랑 같습니다.