공부하는 블로그

Baekjoon | Q.4344 - 평균은 넘겠지 본문

알고리즘 공부

Baekjoon | Q.4344 - 평균은 넘겠지

치킨닮은닭 2019. 12. 21. 00:22
 

4344번: 평균은 넘겠지

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자

www.acmicpc.net

 평균이 넘는 학생의 비율을 구하는 문제이다. 

 

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
		
    Scanner sc = new Scanner(System.in);
    int testcase = sc.nextInt();	// 테스트 케이스 입력
		
    for (int i = 0; i < testcase; i++) {	// 테스트 케이스만큼 반복
      int[] score = new int[sc.nextInt()];	// 학생 수 입력
      int sum = 0;
      double avg = 0;
			
      // 학생들의 점수를 배열에 저장하고 평균을 구하기 위해 총합을 구함
      for (int j = 0; j < score.length; j++) {
        score[j] = sc.nextInt();
        sum += score[j];
      }
		
      avg = sum / score.length;	// 평균
			
      // 평균이 넘은 학생 수를 구함
      int overAvg = 0;
      for (int j = 0; j < score.length; j++) {
        if(score[j] > avg) {
          overAvg++;
        }
      }
			
      // 평균이 넘는 학생 수의 비율을 구함.
      float rate = (float) (Math.round(overAvg / (float)score.length * 100 * 1000) / 1000.000);
      System.out.println(String.format("%.3f", rate) + "%");
	
    }
		
  }

}

 

 모든 값을 구한 후 비율값을 계산하는데 어려움이 있었다. 자꾸 값이 0이 출력되었다.. 검색 결과 float로 형변환 해주지 않으면 나눈 결과값이 제대로 나오지 않음을 찾았다.

 Math.round()은 반올림 자릿수가 소수점 첫째자리로 고정되어 반올림 자릿수를 지정할 수 없다. 따라서 결과값에서 1000을 곱한 후 반올림 하여 1000을 다시 나눠주었다.

 String.format()을 사용하지 않는다면 40.000%의 경우 40.0%로 첫째 자리까지만 나타나 format()을 사용했다.

'알고리즘 공부' 카테고리의 다른 글

Baekjoon | Q.1065 - 한수  (0) 2019.12.22
Baekjoon | Q.15596 - 정수 N개의 합  (0) 2019.12.22
Baekjoon | Q.2577 - 숫자의 개수  (0) 2019.12.20
Baekjoon | Q.10951 - A + B 4  (0) 2019.12.19
Baekjoon | Q.1110 - 더하기 사이클  (0) 2019.12.19
Comments