파이썬(Python)/백준(Baekjoon) 문제 풀이

[백준,python] 4344번 : 평균은 넘겠지(1차원 배열)

sunning 2022. 3. 20. 00:02
728x90
반응형

백준 4344번 문제 풀기

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

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

www.acmicpc.net


문제 설명

문제

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

입력

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

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

출력

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

예제 입력 1
예제 출력 1
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%

알고리즘 및 설명 

정말 내가 푼 문제들 중에 가장 런타임 에러(AttributeError)가 많이 나온 문제이다. 중간에 포기하고 넘어갈까 싶었지만 오기가 생겨서 계속 시도해보았다. 구글링도 해보았지만 다들 중도 포기한 경우도 많이 있었다.내가 해결한 방법은 sys모듈로 입력값을 불러오는 대신 input()을 활용하는 것이다.왜 sys 모듈을 사용하면 런타임 에러가 나는지는 아직도 모르겠다. (만약 독자분들께서 알고계신다면 댓글로 남겨주시면 감사하겠습니다:))

 

아무튼! 정답이었던 코드는 아래와 같다.

 

import sys
C = int(input())

for i in range(C):
    Score = list(map(int, input().split()))
    Mean = sum(Score[1:])/Score[0]
    cnt = 0
    for j in range(1, len(Score)):
        if Score[j] > Mean:
            cnt += 1
    percent = 100*cnt/Score[0]
    print("{:.3f}%".format(round(percent,3)))

 

또한 이 문제에서 하나 배운 것이 있다.

나는 처음에 모든 케이스를 한 번에 전부 저장하기 위해 이중 배열을 사용했는데, 어차피 한 케이스씩 출력하면 되는 문제로 하나의 배열에 한 케이스씩 받고 버리는 것이(새로운 케이스로 덮어씌우는 것이) 더 효율적이다.

 

지금은 아주 작은 생각 중 하나일 뿐이지만 이런 생각 하나하나들이 쌓여 내 실력이 되어있을 먼 훗날이 기대된다!

728x90
반응형