멋쟁이v의 개발일지

[백준 4344번] 평균은 넘겠지(파이썬) 본문

0년차/알고리즘(1차원 배열)

[백준 4344번] 평균은 넘겠지(파이썬)

멋쟁이v 2022. 11. 28. 16:49
728x90
320x100
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 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%

 


 

풀이
이 문제는 각 케이스 마다 평균을 구해서 그 평균을 넘는 학생들의 비율을 구해야 합니다.

예제를 보면
5 50 50 70 80 100
학생 5명의 평균을 구하면 70이네요.
평균 70보다 높은 점수를 받은 학생은 2명이구요.
5명 중 2명의 비율은 40%입니다. 정답 : 40%

코드를 순서대로 작성한다면
1. 각 케이스 별 학생 수와 점수를 입력
2. 케이스의 두번 째부터 점수가 시작되니, 두번 째부터 다 더한 후 학생 수로 나눈 평균을 저장
3. 평균을 각 학생들의 점수와 비교하고 높은 점수를 받은 학생 수를 저장
4. 저장된 수를 전체 학생 수의 비율을 출력(소수점 3째자리까지 반올림)


작성 코드
N = int(input())

for _ in range(N):
    A = list(map(int, input().split())) # 학생 수와 점수를 입력
    
    AVG = sum(A[1:]) / A[0] # 입력 2번째 부터 더한 후 1번째 학생 수로 나눈 평균
    cnt = 0
    
    for i in A[1:]: # 각 점수를 하나씩 평균과 비교
        if i > AVG:
            cnt += 1 # 평균보다 큰 점수를 카운트 +1
            
	answer = cnt / A[0] * 100 # 비율을 구한 후 변수에 저장
    
    print('%.3f' %answer + '%') # 소수점 셋째자리까지 반올림하고 %를 붙여서 출력
728x90
320x100
Comments