[항해]알고리즘 스터디(백준 #4344)

Jeon·2021년 6월 28일

알고리즘

목록 보기
15/33

백준#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)
profile

0개의 댓글