디스 프로그래머 (This Programmer)

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

알고리즘/풀이

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

디스 프로그래머 2019. 2. 14. 22:54

문제

대학생 새내기들의 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%

풀이

testcase_count = int(input())
result_list = []

for testcase_index in range(0, testcase_count):
    student_input = input().split()
    student_count = int(student_input[0])
    student_scores = [int(i) for i in student_input[1:]]
    student_average = float(sum(student_scores) / len(student_scores))
    student_count_over_average = len([score for score in student_scores if student_average < score])
    student_percentage_over_average = '{0:.3f}%'.format(round((student_count_over_average / student_count) * 100, 3))
    result_list.append(student_percentage_over_average)

print(*result_list)

설명

딱히 설명할 게 없다. 입력 구조가 조금 특이해서 왜 문제를 이따구로 만들었을까 의문이 들긴 했지만 말이다. 어떤 부분이 이상하냐면 테스트케이스를 입력한 뒤에 각 라인에서 학생들의 숫자를 입력하는 부분이다. 예를 들어 입출력 예의 입력에서 50 50 70 80 100만 입력하면 자연스레 5명의 점수가 되는 것인데 굳이 5라는 걸 입력해야했나... 하는 불만이 있다. 그거 말고는 그냥 리스트를 더하고 빼고 나누고 단위로 출력하고 하는 문제라 아주아주 간단하게 풀렸다. 한 번에 소수점을 맞춘 문자열 형태로 출력하려다보니 그 부분은 좀 더러워졌지만 딱히 뭔가 다듬는다고 해도 코드의 열은 줄 지언정 행이 늘어날 것이므로 여기에서 종료했다.

0 Comments
댓글쓰기 폼