1일 1백준

1일 1백준 : 1일차 4344번 평균은 넘겠지

gaonhae 2022. 4. 19. 16:36

1일 1백준 1일차, 오늘 푼 문제는 4344번 문제인 "평균은 넘겠지"이다.

자바로 배열을 다루는 것이 익숙하지 않아 혼자 2차원 배열을 만들면서 쌩쇼를 하다가 겨우 풀었다.

아직 갈 길이 멀었다.

 

 

4344번 "평균은 넘겠지" 문제 바로가기

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

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

 

 

 

나는 이 문제를 두 개의 배열을 이용해서 풀었다. 

테스트 케이스를 담는 배열 arr와

테스트 케이스마다의 점수 합계, 평균, 평균을 넘는 학생의 수를 담아내는 배열 score가 그것이다

 

 

문제를 풀면서 난생 처음 보는 오류를 접해 살짝 당황했다.

출력에 있는 %를 문자열 포맷 안에 그대로 넣으니 오류가 발생한 것이었다.

%%로 입력해줘야 정상적으로 %가 출력된다는 점을 배웠다.

 

 

내가 생각하기에도 코드가 좀 더럽고 개선할 부분이 많은 것 같다. 

시험기간이 끝나면 코드에 조금 더 정성을 들여야겠다.

일단은 문제를 풀었으니 만족.

 

 

 

 

 

 

 

 

 

 

 

 

 

아래로 내리면 정답 코드가 나옵니다. 문제를 아직 풀지 않으신 분들은 주의해주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

import java.util.Scanner;
import java.util.Arrays;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int count = Integer.parseInt(sc.nextLine());
        float studentCount = 0;
        float avg = 0;
        float sum = 0;
        float[] arr = new float[count];


        for (int a = 0 ; a < count ; a++){
            int student = sc.nextInt();
            float[] score = new float[student];
            for ( int b = 0 ; b < student ; b++){
                score[b] = sc.nextFloat();
                sum += score[b];
            }
            avg = sum / student;

            for ( int c = 0 ; c < student ; c++){
                if (score[c] > avg){
                    studentCount++;
                }
            }
            arr[a] = studentCount / student;
            studentCount = 0;
            sum = 0;
        }

        for( int i = 0 ; i < count ; i++){
            System.out.printf("%.3f%%\n",arr[i]*100);
        }
    }
}