[Java] 실전 문제 - 평균구하기(백준 1546)

2023. 9. 23. 12:16
🧑🏻‍💻 하루코딩 님의 Do it! 알고리즘 코딩테스트 강의(인프런)를 듣고 정리한 내용입니다. 

 

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

 

1546번: 평균

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

www.acmicpc.net

 

01. 문제 분석하기

백준 1546

  • 만약 아래 예제를 가지고 생각을 해 본다면 세 가지 주어진 점수 중 최댓값은 80이다. 
    • 그래서 각각 점수를 고쳐 본다면 
      40/80*100 = 50
      80/80*100 = 100
      60/80*100 = 75
      이러한 결과가 나올 것이고 이들의 총 평균을 구하면 75가 나오게 된다. 
  • 저런 식으로 계산한다는 것을 알게 되었으니 좀 더 정리를 해보자.
    저 세 가지의 식을 일단 모두 더해야하는 것은 알고 있다. 그렇다면 아래와 같이 적을 수 있다. 
    (40/80*100) + (80/80*100) + (60/80*100) / 3
  • 여기서 반복되는 것이 하나 있다. /80*100. 그렇다면 수식을 아래와 같이 줄일 수 있다.
    (40 + 80 + 60)*100/80/3
  • 위 수식을 기호로 나타내본다면 아래와 같이 표시할 수 있다. 이렇게 정리한 것을 문제를 풀 때 사용하면 된다.
    (A + B + C)*100/M/3

 

 

 

02. 슈도 코드 작성하기

변수 N에 과목 수 입력받기 
길이가 N인 1차원 배열 A[] 선언하기
for(A[] 길이만큼 반복){
	A[i]에 각 점수 저장하기
}
for(A[] 길이만큼 반복){
	최고점은 변수 max에 총 합은 sum에 저장
}

sum * 100 /max/N 출력하기

 

03. 실제 코드 작성하기

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int N = sc.nextInt();
       int A[] = new int[N];
       
       for(int i = 0; i<N; i++){
       		A[i] = sc.nextInt();
       }
       
       long sum=0;
       long max = 0;
       
       for(int i=0; i<N; i++){
       	if(max<A[i]) max = A[i];
        sum+=A[i];
       }
       System.out.println(sum*100.0/max/N);        
    }
}

 

BELATED ARTICLES

more