[백준] n.4344 - 각 학생 수 별로 평균이 넘는 비율 구하기

    SMALL

    1. 문제
    https://www.acmicpc.net/problem/4344

     

    4344번: 평균은 넘겠지

    대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

    www.acmicpc.net

     

    2. 주요 개념
    - float 배열
    - String.format()
    - 리스트 (ArrayList)

    - list.add, list.clear, list.get(i)...

    3. 나의 풀이 (*은 잘 안풀린 부분)

    import java.io.*;
    import java.util.*;
    
    // 비율: 반올림하여 소수점 셋째 자리까지 출력
    
    class Main {
    
      public static void main(String[] args) {
    
        Scanner s = new Scanner(System.in);
    
        int c, n;
        float score = 0;
        float sum = 0;
    
        c = s.nextInt();
        // 테스트 케이스 개수
    
        ArrayList<Integer> list = new ArrayList<Integer>(); // 각 학생 수
        ArrayList<Float> score_list = new ArrayList<Float>(); // 각 학생의 점수
        float[] avg = new float[c];
        float[] ratio = new float[c];
    
        for (int t = 0; t < c; t++) {
          avg[t] = 0;
          ratio[t] = 0;
        } // 배열 초기화
    
        for (int i = 0; i < c; i++) {
          n = s.nextInt(); // 학생 수 입력
          list.add(n);
          for (int j = 0; j < n; j++) {
            score = s.nextFloat(); // 점수 입력
            score_list.add(score);
            sum += score; // 점수 합
          }
          avg[i] = sum / n; // 평균 값 저장
    
          for (int b = 0; b < n; b++) {
            if (score_list.get(b) > avg[i]) {
              ratio[i]++; // 평균 넘는 사람의 수 체크
            }
          }
    
          ratio[i] = (ratio[i] / n) * 100;
          System.out.println(String.format("%.3f", ratio[i]) + "%"); // * 소수점 셋째짜리 반올림 포맷
     
          sum = 0; // sum 값 초기화
          score_list.clear(); // * score_list를 비워줘야 함! > 그래야 반복문마다 새로운 score_list가 저장됨.
        }
    
      }
    }



    4. 짚고 넘어가기!
    - String.format("포맷 형식", 변수) > 변수를 포맷 형식으로 바꾸어줌 (String 형태로 바뀜)
    - score_list.clear() > 리스트 값 지움! (반복문마다 학생 점수 값 넣을 수 있도록 비워줌)

    - 소수점을 위해서는 float 형 사용!

    728x90

    댓글