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

문제

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

  • 입력
    첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
    둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
  • 출력
    각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다

내 풀이

def getmean(iterable):
    sum = 0
    for _ in iterable:
        sum += _
    return sum/iterable.__len__()

loopCount = int(input())

for _ in range(0, loopCount):
    values = list(map(float, input().split()))
    # 첫번째 데이터 = 학생수  -> pop을 이용해 첫번째 데이터만 꺼냄
    num_student = values.pop(0)
    # 평균 구하는 함수를 만들어 사용
    mean = getmean(values)
    # 줄 수를 간소화 하기 위해 filter와 lambda식을 사용
    count = list(filter(lambda x: x > mean, values)).__len__()
    # 소수 셋째자리까지 구하기 위해 format 사용
    # rount를 사용했을 떄 자리수가 안맞아도 0이면 표시를 안함
    print("{}%".format(format(count/num_student*100, '.3f')))

오늘은 코드를 간소화하기 위해 노력을 했다. 기능을 다 만들어놓고 어떻게 하면 간소화 시킬 수 있을까 고민하면서 수정을 했다. getmean함수도 간소화 시킬 수 있을 것 같은데... 잘 생각인 안난다.

출처

[백준] 4344번: 평균은 넘겠지

좋은 웹페이지 즐겨찾기