Python/백준 문제 풀이

[BOJ] 4344번 평균은 넘겠지 풀이

서원두 2022. 7. 15. 17:52

[BOJ] 4344번 평균은 넘겠지 문제

각 케이스마다 평균이 넘는 사람의 비율을 구하는 문제다.

파이썬의 기본 함수인 round를 쓰면 무조건 틀리니 우리가 직접 반올림을 구현해야 한다! (참고 - [파이썬 알고리즘 #2] 기본 입출력 - 출력)

import sys

if __name__ == '__main__':
    C = int(sys.stdin.readline().rstrip())
    for _ in range(C):
        N_score = list(map(int, sys.stdin.readline().rstrip().split()))
        now_average = sum(N_score[1:]) / N_score[0]
        over_average_num = 0

        for i in range(N_score[0]):
            if N_score[i+1] > now_average:
                over_average_num += 1

        over_average = int(100000*(over_average_num/N_score[0]) + 0.5) / 1000
        print(f'{over_average:.3f}%')

 

이 문제가 옛날 문제라서 입력이 좀 더러운 편이다(...). 그래도 어쩌겠는가, 풀어야지...

먼저 입력을 list로 받은 후 N과 점수들을 구분한다. N_score[0]은 N이 될 테고, N_score[1:]은 점수들이다.

N_score[1:]은 N_score의 1번 원소부터 끝까지를 잘라내는, 슬라이싱(slicing)이라고도 불리는 기법이다. 자주 쓰이므로 꼭 알아야 한다.

그렇게 구한 평균보다 큰 사람의 수를 구하고, N을 나눠 % 비율을 구하면 된다.

여기서 반올림하는 것과 f-string을 쓴다. 100을 곱한 수에서 소수점 넷째 자리에서 반올림 작업을 하고, 다시 돌려놓는다.

만약 정수 또는 소수 첫째 자리 퍼센트라 소수점의 의미가 없다 해도 괜찮다. f-string의 .3f가 그런 경우 알아서 뒤의 소수점 셋째 자리까지 0으로 채워줄 것이다.

728x90