본문 바로가기

Problem Solving/Baekjoon Online Judge

<1차원 배열> 4344번 평균은 넘겠지 with 파이썬

 

문제

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

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

정답비율

37.931%

 

N = int(input())

for _ in range(N) :
    case = list(map(int, input().split()))
    n = case[0]
    lst = case[1:]
    avg = sum(lst)/n
    count = 0
    
    for i in range(n):
        if lst[i] > avg :
            count += 1
            
    rnd = round(count/n*100,3)
    
    print('%.3f%%' %rnd)

 

 가장 먼저 for구문은 2개가 필요할 것이라고 생각하였다. 입력을 리스트로 받은 후 슬라이싱을 통해 0번째는 n으로, 나머지는 새 리스트로 바꿔주고 진행하였다.

 

 그리고나서 평균을 구하고, count 변수에 평균보다 큰 수의 갯수를 넣도록 진행하였다. 

 

 평균을 넘는 학생들의 비율을 반올림하는 것까지는 위와 같이 진행하여 rnd변수에 쉽게 넣을 수 있었다. 그러나 소수점 셋째 자리까지 잘 나오나 싶다가도 소숫점이 애초에 셋째자리 미만인 숫자는 40.0 과 같이 첫째자리만 나왔다. 즉 예제출력에서의 40.000%가 나오지 않았다. 

 

 결국 소숫점을 원하는 자리까지 나오게 하는 방법을 찾아보았다. 이는 다음과 같다.

 

  '%.3f' % N : N을 소숫점 셋째자리까지 표시

  '%.3f%%' % N : N을 소숫점 셋째자리까지 표시하고 % 표시

 

 %.숫자와 형식 을 작은따옴표에 넣고 % 숫자or문자 를 통해 연결시켜줄 수 있다는 것을 알게 되었다. 따옴표는 출력을 위해 print구문 속에 넣어준 것이다. 형식에는 s(문자열), d(정수형), f(실수형) 을 넣을 수 있다. 만약 1이라는 숫자를 3d와같이 표현하게 되면 003 을 표현할 수 있다.

 

 

 


 

참고

 

4344번: 평균은 넘겠지

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

www.acmicpc.net