TIL 27 | 평균을 넘는 비율을 구하자 (백준 4344 python)

Gom·2021년 3월 5일
0

Algorithm

목록 보기
6/48
post-thumbnail
post-custom-banner

# 문제풀이 

C = int(input())
ans = []

for _ in range(C) :
    num_list = list(map(int, input().split()))
    avg = sum(num_list[1:])/num_list[0]
    cnt = 0
    for score in num_list[1:]:
        if score > avg:
            cnt +=1
    rate = cnt/num_list[0]*100
    ans.append(rate)

for rate in ans :
    print(format(rate,'.3f')+'%')

1. 케이스 수와 그 수만큼의 배열을 입력받는다.

  • 입력받은 배열은 반복문을 돌리기 위해 리스트로 저장한다.


2. 점수들의 합계와 평균을 구한다.

  • sum(num_list[1:]) : 배열의 [0]번째 인덱스 값에 위치한 수는 점수가 아닌 학생 수를 의미한다. 그 수를 제외하고 [1]번째 값부터 마지막 값까지를 더한 합을 구한다.
  • 점수 합을 학생 수로 나누어 평균을 구한다.


3. 각 점수와 평균을 비교하여 평균 이상의 학생 수를 구한다.

  • 점수가 평균 이상일 때마다 cnt를 하나씩 더해나간다.


4. 산출 값을 배열에 저장 후 한 줄씩 출력한다.

  • 값이 한 줄씩 출력되더라도 답안으로 인정된다고 한다. 입력과 출력 모두 한 번에 여러 값을 해내고 싶어 배열과 for문을 이용하여 출력하였다.
  • 소수점 셋째자리까지 표기하라는 조건에 따라 format함수를 이용하였다.

새롭게 알게 된 개념

  • 입력한 수만큼의 input을 받는 방법을 새롭게 알게되었다. C의 값을 받은 뒤 range(C)로 for문을 돌려 배열을 입력받으면 된다.
  • 여러 값을 한 번에 출력하기 위해 값들을 배열에 넣어 for문으로 출력하는 방법을 시도해보았다.
  • round() 와 format(), 소수점 셋째자리까지 표시하기 위해 round함수를 사용했으나 표시할 숫자가 0인 경우 자동으로 숫자가 생략되어 버렸다. 반면 format()의 경우 표시할 숫자가 0일지라도 자리수를 맞춰준다.
  • print 시 반점(,)으로 문자열을 이으면 중간에 공백이 들어간다. 출력 과정에서 '%'를 반점(,)으로 이어주어 답안 인정이 안되었다가 +를 이용하여 문자열을 이어주니 답안 인정이 되었다.
  • 입력과 출력 방식의 디테일도 놓치지 말아야 함을 느낀다.

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

profile
안 되는 이유보다 가능한 방법을 찾을래요
post-custom-banner

0개의 댓글