본문 바로가기
Programming/Python

[BAEKJOON_Python] 4344. 평균은 넘겠지

by 최성현 2022. 3. 12.
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%

 

320x100

 

1. 테스트 케이스 개수 C개 입력

C = int(input())

2. 입력한 C개의 케이스마다 학생수와 점수를 입력

  • 입력한 숫자는 학생수(number[0])와 점수로 구성 e.g.) 5 10 20 30 40 50
for _ in range(C):
    number = list(map(int, input().split()))

3. 입력한 학생수를 빼고 뒤에 점수만 남기는 리스트 생성하고 평균 계산

  • del을 사용하여 0번째 인덱스인 학생수를 제거하고 나머지를 score라는 새로운 리스트에 저장
  • 평균은 리스트의 전체 합을 리스트의 갯수(len(score))로 나누어 계산
    del number[0]
    score = number
    avg = sum(score)/len(score)

4. 평균을 넘는 학생의 비율을 반올림하여 소수점 셋째 자리까지 출력

  • 평균이 넘는 학생의 수를 저장할 리스트(above)를 생성
  • for문을 사용하여 score 리스트에 있는 인자를 평균과 비교하여 평균보다 높으면 above에 저장
  • 평균이 넘는 학생의 비율((len(above)/len(score))*100)을 계산하여 출력
    above =[]
    for i in score:
      if i > avg :
        above.append(i)
  	print(round((len(above)/len(score))*100,3),'%', sep='')

처음 코드는 위와 같이 작성하였으나 정답이 아니라고 나왔다. 계산은 맞지만 결과를 출력하는 과정에서 소수점이 0인 경우 셋째 자리까지 출력이 안되어 아래와 같이 수정하였더니 통과했다.

    above =[]
    for i in score:
      if i > avg :
        above.append(i)
    rate = (len(above)/len(score))*100    
    print(f'{rate:.3f}%')

결과를 비교해보면 아래와 같다.

f{}%를 사용하면 0.000%이고 round를 사용하면 0.0%이다.

 

전체코드

C = int(input())

for _ in range(C):
    number = list(map(int, input().split()))
    del number[0]
    score = number
    avg = sum(score)/len(score)
    above =[]
    for i in score:
      if i > avg :
        above.append(i)
    rate = (len(above)/len(score))*100    
    print(f'{rate:.3f}%')
300x250

'Programming > Python' 카테고리의 다른 글

[BAEKJOON_Python] 15596. 정수 N개의 합  (0) 2022.03.12
[BAEKJOON_Python] 8958. OX퀴즈  (0) 2022.03.11