본문 바로가기

Problem Solving/Baekjoon Online Judge

[BOJ/백준] 4344번 평균은 넘겠지 | 1차원 배열

문제 

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

 

입력

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

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

 

출력

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

 

 

문제 풀이

n = int(input())
while n:
    case = list(map(int, input().split()))
    avg = (sum(case) - case[0])/case[0]
    num = 0
    for i in range(case[0]):
        if case[i+1] > avg:
            num += 1
    print("{:.3f}%".format(num/case[0]*100))
    n -= 1

 

테스트 케이스의 개수를 변수 n으로 받았다.

 

n이 0이 될 때까지 반복하는 while문을 만들었고, 각 케이스의 학생 수와 점수를 입력받았다.

 

평균을 구하기 위해서 리스트의 합을 구하는 sum 함수를 사용했다.

 

학생 수만큼 반복하는 for문을 만들어 만약 점수가 평균을 넘으면 변수 num을 1씩 증가시켰다.

 

format 함수를 사용해 소수점 셋째 자리까지 출력시켰다.

* format함수는 중괄호 안에 포매팅을 지정하고 format 함수의 인자로 값을 넣는다(콤마로 구분). 쉽게 말해 중괄호를 이용해 format함수에서 넣어줄 것을 표시한다.

 

round() vs format()

round 함수는 자릿수를 지정해줘도 끝자리가 0인 경우 출력하지 않는다.

 

다른 풀이

잠시 잊고 살았던 리스트 슬라이싱을 사용해 다시 문제를 풀어봤다👍

n = int(input())
for i in range(n):
    case = list(map(int, input().split()))
    score = case[1:]
    avg = sum(score)/case[0]
    num = 0
    for j in range(len(score)):
        if score[j] > avg:
            num += 1
    print("{:.3f}%".format(num/case[0]*100))

 


 

 

4344번: 평균은 넘겠지

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

www.acmicpc.net