Algorithm/Java

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

보라해바라기 2023. 5. 29. 00:09
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