알고리즘/알고리즘 공부(JAVA)

backjoon_1546_평균 Using(Java)

소소한필통 2022. 8. 31. 01:54

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

 

1546번: 평균

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

www.acmicpc.net

문제 해결 방안

1. input이 N과 다음줄에 N수 만큼의 성적이 입력된다. 그래서 N과 각 성적을 나눠서 저장한다.

2. 각 성적에서 최댓값을 찾는다.

3. 최대값을 제외한 성적들을 공식에 맞게 변경한다.

4. 그러고 sum을 구한뒤에 N으로 나눠 평균을 구한다.

 

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

public class backjoon_1546_평균 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    // 총 과목이 몇개 잇는지 확인
    int N = Integer.parseInt(br.readLine());
    // StringTokenizer로 성적이 몇개인지 확인
    StringTokenizer st = new StringTokenizer(br.readLine());
    // 성적을 입력 받을 곳
    double[] arr = new double[N];
    // 평균, 각 점수, 점수의 최대값을 나타내기 위한 변수 지정
    double sum = 0;
    double score = 0;
    double maxNum = 0;
    // 최대값 찾기
    for (int i = 0; i < N; i++) {
      score = Integer.parseInt(st.nextToken());
      if (score > maxNum) {
        maxNum = score;
      }
      arr[i] = score;
    }
    // 성적을 수정한 뒤에 합을 구하기
    for (int i = 0; i < N; i++) {
      double newNum = arr[i] / maxNum * 100;
      arr[i] = (newNum);
      sum += newNum;
    }
    // 평균 출력하기
    System.out.println(sum / N);
  }
}