Python/백준 문제 풀이
[BOJ] 4344번 평균은 넘겠지 풀이
서원두
2022. 7. 15. 17:52
각 케이스마다 평균이 넘는 사람의 비율을 구하는 문제다.
파이썬의 기본 함수인 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