본문 바로가기

백준/python

4344:평균은 넘겠지(python)

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

 

4344번: 평균은 넘겠지

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.

www.acmicpc.net

 

문제

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

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

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

평균을 구하라.

풀이

다른 풀이에도 적어 놨듯이, list 처리할때는 스페이스로 구분한 시점에서 별개의 인덱스가 부여된다. list[0], list[1]이 다른 식별용 무언가라는 것을 항상 명심하자.

코드

 

1차 오류

t=int(input())#test_case

for i in range(t):
    score = list(map(int, input().split()))
    # 여기서 1번째=score[0]은 몇 명인지 하는 것이니 따로 주의가 필요
    avg=sum(score[1:])/score[0] #스코어 인덱스 1부터가 학생들의 점수, 0은 학생의 수다
    #[1:]=1부터 끝까지라는 뜻 학생의 성적을 합한 다음 나누어 평균을 구하는 식
    count=0
    for grade in score[1:]: # 이게 만약 스코어 안에 있을 경우
        if grade>avg: # 스코어 배열 안에 있는 것들이 평균보다 클 경우
            count+=1 #학생수 하나를 추가
    rate=count/score[0] *100 #학생수 백분율 계산

print(f'{rate:.3f}%') #반복문 안에 넣지 않아 1개만 출력하는 오류 부분이다

 

최종 수정본

 

t=int(input())#test_case

for i in range(t):
    score = list(map(int, input().split()))
    # 여기서 1번째=score[0]은 몇 명인지 하는 것이니 따로 주의가 필요
    avg=sum(score[1:])/score[0] #스코어 인덱스 1부터가 학생들의 점수, 0은 학생의 수다
    #[1:]=1부터 끝까지라는 뜻 학생의 성적을 합한 다음 나누어 평균을 구하는 식
    count=0
    for grade in score[1:]: # 이게 만약 스코어 안에 있을 경우
        if grade>avg: # 스코어 배열 안에 있는 것들이 평균보다 클 경우
            count+=1 #학생수 하나를 추가
    rate=count/score[0] *100 #학생수 백분율 계산

    print(f'{rate:.3f}%') #반복문 안에 출력을 넣는 것을 깜빡했다...

'백준 > python' 카테고리의 다른 글

2693:N번째 큰수(python)  (0) 2023.09.14
2729: 이진수 덧셈(python)  (0) 2023.09.14
2033:반올림(python)  (0) 2023.09.14
5585: 거스름돈(python)  (0) 2023.09.14
2755: 이번학기 평점은 몇 점?(python)  (0) 2023.09.13