본문 바로가기
IT/알고리즘

백준 4344 파이썬 평균은 넘겠지

by 시작은코딩 2022. 2. 22.
반응형


풀이

c = int(input())
e=[]
for i in range(c) :
    b = list(map(int, input().split()))
    sum = 0

    for ii in range(b[0]) :
        sum += b[ii +1]
        cnt=0

    for ii in range(b[0]) :
        if b[ii+1] > sum/b[0] :
            cnt +=1

    e.append((cnt/b[0])*100)
    b.clear()

for i in range(c) :
    print(f'{e[i]:.3f}%')

여러가지로 고민 많이 하고 했는데,

요 분 블로그보고 제일 쉽게 이해했다.

 

https://wook-2124.tistory.com/244

 

백준 알고리즘 | 4344 : 평균은 넘겠지 (Python / 파이썬)

평균은 넘겠지 출처다국어분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 80917 29913 25930 38.079% https://www.acmicpc.net/problem/4344 4344번: 평균은 넘겠지 대학생 새내기들의 9..

wook-2124.tistory.com

c = int(input())
e=[]
for i in range(c) :
    b = list(map(int, input().split()))
    sum = 0

1. 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 를 만족시키고,

2. e 라는 빈 리스트 만들어준다.

3. for 를 하는데 범위는 테스트의 개수만큼.

4. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 를 만족하기 위해 작성한 b. 

예제)
5 50 50 70 80 100

예제의 이 숫자를 넣는 곳.

5. sum 변수를 만든다.

    for ii in range(b[0]) :
        sum += b[ii +1]
        cnt=0

6. range(b[0]) 은 예제에서 봤듯이, 5 50 50 70 80 100 중 학생의 인원수 5 만큼을 반복하는것이다.

반복은 학생 수 만큼 하면서 sum은 학생의 점수를 더할 수 있게 b[ii+1] 을 해준다.

다음 cnt=0 변수를 만들어두는데, 

    for ii in range(b[0]) :
        if b[ii+1] > sum/b[0] :
            cnt +=1

7. 같은 반복문으로, 만약 학생의 점수(b[ii+1])가  평균(sum/b[0]) 보다 크다면,

cnt를 하나씩 올려준다.

 

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

평균 넘는 학생들을 찾아야 하기 때문.

 

    e.append((cnt/b[0])*100)
    b.clear()

8. 맨 위에서 만들어둔 e 리스트에, 평균을 넘는 학생 수(cnt) / 학생 총 수(b[0] * 100 = 비율 을 해준다. 

9. b.clear() 는 다음 for문이 돌 때 b의 입력된 값을 없애준다.

for i in range(c) :
    print(f'{e[i]:.3f}%')

10. 마지막 반복문 작성 후,

최종 값을 출력해주는데, 문제에서 원하는대로 소수점 셋째자리까지 + '%'를 붙여 출력하기 위해 f-string 문자열을 사용.

 

소수점 관련된 f-string 문자열의 활용은 위와 같이 작성해주면 된다. 

f 적고 세미콜론후 {} 안에 필요한 값 작성, 이후 : 사용 다음 콤마(.)와 원하는 소수점범위(3) 작성 후 f로 적어둔다.


n = int(input())

for i in range(n):
  input_score = list(map(int, input().split(' ')))

  avg = sum(input_score[1:])/input_score[0]
  cnt = 0

  for score in input_score[1:]:
    if score > avg:
      cnt += 1
  rate = cnt / input_score[0] * 100
  print(f'{rate:.3f}%')

이건 다른 분 코드보다가 , 이해되기도 하고 더 간결한듯하여 가져와봄.

근데 이거는 출력할 때 입력하면 바로 출력이 하나씩 나와버려서, 아무래도 위에거가 식은 더 길지만 이해하기에 수월하다.

 


배운것

f-string, for문 안에 for를 어떻게 구성해야 하는지 (연속 for 문 작성)

반응형

'IT > 알고리즘' 카테고리의 다른 글

백준 1065 한수 파이썬  (0) 2022.02.24
백준 4673 셀프 넘버 파이썬  (0) 2022.02.23
백준 8958 OX퀴즈 파이썬  (0) 2022.02.21
백준 1546 평균 파이썬  (0) 2022.02.21
백준 3052 나머지 파이썬  (0) 2022.02.20