본문 바로가기

알고리즘 문제

백준 알고리즘 평균은 넘겠지 4344번

문제

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

입력

첫째 줄에는 테스트케이스 C가 주어진다.

둘째 줄부터 각 테스트케이스 마다 첫 수로 정수 N(1 <= N <= 1000)명의 학생이 주어지고 그 다음으로 N명의 0부터 100 사이의 점수가 이어서 주어진다.

출력

각 케이스마다 한줄씩 평균을 넘는 학생들의 비율을 소수점 넷째자리에서 반올림하여 출력한다.

예제 입력 

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

예제 출력 

40.000%
57.143%
33.333%
66.667%
55.556%


케이스 입력받는다. 학생과 점수를 리스트로 입력받는다. 헷갈려서 학생은 students 변수에 리스트의 첫번째 원소값을 넣고, 학생 수를 버렸다.

성적들로 평균을 구하고 평균 이상인 점수가 나오면 count에 1 더한다.

비율을 계산한 뒤 소수점 넷째자리에서 반올림하여 소수점 이하가 세자리가 되게 한다.


소스코드


C = int(input())

avg=count=rate = 0

while C>0:

    list1 = list(map(int, input().split()))#리스트로 입력받기

    students = list1[0] #리스트의 첫번째 인덱스 값은 학생 수

    list1.pop(0) #학생 수 버린 리스트

    grade = list1 #성적만 뽑아냄

    avg = sum(grade) / students #성적 다 더해서 학생 수로 나눈 게 평균

    for i in grade:

        if i > avg:

            count += 1

    rate = count/students*100

    print("%.3f%%" % round(rate ,3))

    C -= 1

    avg=count=0

    grade.clear()



 print("%.3f%%" % round(rate ,3))

이 부분은 소수점 넷째 자리에서 반올림하여 소수점 이하 세자리를 나타내준다. 이걸 몰라서 자꾸 틀렸다.