백준#4344
문제
한 반에서 평균점수보다 높은 학생의 비율을 구하는 프로그램을 작성하자.
ex)학생이 5명인 반이 있고, 각 학생의 성적은 50 50 70 80 100이라고 가정하자. 이 경우 평균점수는 70점이다. 70점이 넘는 학생의 수는 2명이다. (조건 - 평균점수보다 '높은' 학생의 비율을 구하는 것이므로 70점인 학생도 카운트에서 제외한다) 5명 중 2명이 조건을 만족하므로, 이 반에서 평균성적보다 높은 성적을 가진 학생의 비율은 40%이다.
입출력 규칙
1. 입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
2. 출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
문제 접근
1. 테스트케이스의 개수 c만큼만 2번째 줄을 작성할 수 있게 한다. (반복문, range 이용)
2. 2번째 줄에서 입력한 수를 리스트의 형태로 저장한다. 리스트의 0번째에는 학생의 수가, 1~n번째에는 각 학생의 점수가 입력된다.
3. 반복문과 range, len을 이용해 1~n번째 인덱스를 모두 더해 total 변수에 담아준다.
4. 반복문 종료 시 average 변수에 total을 학생의 수(len(m)-1)로 나눠 평균점수를 구한다.
5. 반복문을 이용, 각 리스트를 하나씩 꺼내어 average와 비교, 조건에 부합 시 cnt+=1 처리한다.
6. cnt를 학생의 수로 나누어 비율을 구하고(0~1), 여기에 100을 곱해 0~100의 형태로 표현해서 arr 리스트에 저장한다.
7. arr 리스트에 담긴 값을 하나씩 꺼내기 위해 반복문을 사용하고, 문제에서 요구한 소수점 3번째 자리까리 표현하는 코드로 출력해준다.
코드
c = int(input()) arr = [] for i in range(c): m = list(map(int,input().split())) total = 0 cnt = 0 for j in range(1,len(m)): total += m[j] average = total/(len(m)-1) for k in range(1,len(m)): if m[k] > average: cnt +=1 arr.append(cnt/(len(m)-1)*100) for answer in arr: print("%.3f%%"%answer)