Dev_from the Bottom

#31. Algorithm21_python) 평균은 넘겠지_백준 4344 본문

Algorithm_study

#31. Algorithm21_python) 평균은 넘겠지_백준 4344

고무라면 2022. 6. 1. 10:15

문제) 평균은 넘겠지

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

입력)

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

출력)

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


 


step1) 테스트1 : 1행만

n = 5
scores = [50, 50, 70, 80, 100]

sum = 0                      # 학생 점수 총합 변수
for i in scores:
    sum += i

print(sum)                   # 점수 총합 : 350
avg = sum / n                # 점수 평균
print(avg)                   # 점수 평균 : 70.0

over = 0                     # 평균 초과 학생 수 표현 변수 
for i in scores:             # 점수를 하나씩 꺼내서,
    if i > avg:              # 평균보다 크면,
        over += 1            # +1
print(over)                  # 2명

answer = (over / n) * 100    # 비율

print(f'{answer :.3f}%')

>>>
350
70.0
2
40.000%

 

 

step2) 테스트2 : 1행 입력 받기

n1 = int(input())   # 5
scores = list(map(int, input().split()))

sum = 0
for i in scores:
    sum += i

avg = sum / n1

over = 0
for i in scores:
    if i > avg:
        over += 1

answer = (over / n1) * 100
print(321)
print(f'{answer :.3f}%')

>>>
5
50 50 70 80 100
321
40.000%

 

 

step3) 테스트3 : 입력 방식 수정 - 한 줄에 다 받기

temp = list(map(int, input().split()))    # 임시 변수에 한행의 입력값을 다 받음
n = temp[0]                               # 첫번째 요소는 변수 n에 할당
scores = temp[1:]                         # 뒤 요소들은 scores라는 list에 할당
print(n)                                  # 5
print(scores)                             # [50, 50, 70, 80, 100]

sum = 0
for i in scores:
    sum += i

avg = sum / n

over = 0
for i in scores:
    if i > avg:
        over += 1

answer = (over / n) * 100
print(f'{answer :.3f}%')

>>>
5 50 50 70 80 100
5
[50, 50, 70, 80, 100]
40.000%

 

step4) 시도1 : 1행

temp = list(map(int, input().split()))
n = temp[0]
scores = temp[1:]

sum = 0
for i in scores:
    sum += i

avg = sum / n

over = 0
for i in scores:
    if i > avg:
        over += 1

answer = (over / n) * 100
print(f'{answer :.3f}%')

>>>
5 50 50 70 80 100
40.000%

 

step5) 시도2 : N값 고정

c = 5                # c = 5로 고정한다고 가정

for _ in range(c):   # c번 반복
    temp = list(map(int, input().split()))
    n = temp[0]
    scores = temp[1:]

    sum = 0
    for i in scores:
        sum += i

    avg = sum / n

    over = 0
    for i in scores:
        if i > avg:
            over += 1

    answer = (over / n) * 100
    print(f'{answer :.3f}%')    
    
 >>>
5 50 50 70 80 100
40.000%
7 100 95 90 80 70 60 50
57.143%
3 70 90 80
33.333%
3 70 90 81
66.667%
9 100 99 98 97 96 95 94 93 91
55.556%

 

step6) 최종

c = int(input())       # c 입력 받기

for _ in range(c):
    temp = list(map(int, input().split()))
    n = temp[0]
    scores = temp[1:]

    sum = 0
    for i in scores:
        sum += i

    avg = sum / n

    over = 0
    for i in scores:
        if i > avg:
            over += 1

    answer = (over / n) * 100
    print(f'{answer :.3f}%')    
    
>>>
5
5 50 50 70 80 100
40.000%
7 100 95 90 80 70 60 50
57.143%
3 70 90 80
33.333%
3 70 90 81
66.667%
9 100 99 98 97 96 95 94 93 91
55.556%

다른 풀이) 참조 :  https://ooyoung.tistory.com/62

n = int(input())

for _ in range(n):
    nums = list(map(int, input().split()))
    avg = sum(nums[1:])/nums[0]  # 평균을 구함 (nums[0]: 학생수, nums[1:] 점수)
    cnt = 0
    for score in nums[1:]:
        if score > avg:
            cnt += 1  # 평균 이상인 학생 수
    rate = cnt/nums[0] *100
    print(f'{rate:.3f}%')

# 배운 점

  • f포멧팅 소숫점 자리 표현 방식 리마인드
  • 리스트 입력 받아서, 필요한 변수로 나누기

 

# 소회

 

Comments