관리 메뉴

코딩 기록 저장소

[백준/Java] 1546번: 평균 본문

백준/1차원 배열 (완료)

[백준/Java] 1546번: 평균

KimNang 2023. 5. 16. 15:54

문제 정보

제목 : 평균

번호 : 1546번

사용 언어 : Java

문제 링크

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

 

1546번: 평균

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

www.acmicpc.net

 

시간 제한 메모리 제한
2 초 128 MB

 

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

 

입력

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

 

출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

 

입출력 예제


나의 풀이

BufferedReader를 이용해 입력을 받아 저장했습니다. N에는 시험 본 과목의 개수를 저장하고, StringTokenizer을 이용해 한줄의 입력값 받은 것을 Token으로 나누어 저장하여 for루프를 이용해 배열에 저장했습니다. 이때 if문을 이용하여 M에 최댓값을 저장하도록 했습니다. for루프를 이용해 배열에 순차적으로 접근하여 모든 점수를 조작하여 result에 저장합니다. 반복이 끝나면 result를 N으로 나누어 출력합니다.

 

코드

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

public class Main {
   
   public static void main(String[] args) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
      int N = Integer.parseInt(br.readLine());
      int M = 0;
      double result = 0;
      
      int[] score = new int[N];
      StringTokenizer st = new StringTokenizer( br.readLine() );
      
      for( int i = 0; i < N; i++) {
    	  int num = Integer.parseInt(st.nextToken());
    	  score[i] = num;
    	  if (M < num) {
    		  M = num;
    	  }
      }
      
      //점수 조작
      for(int i = 0; i < N;i++) {
    	  if( score[i] <= M) {
    		  result += (double)score[i] / M * 100;
    	  }
      }
      bw.write(result/N + "\n");

      
      bw.flush();
      bw.close();
      br.close();
   }   
}