알고리즘

[파이썬] 단계별 백준 문제 풀기 - 4344 1차원 배열 (평균은 넘겠지)

햄❤️ 2021. 3. 6. 17:45
반응형

문제

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

입력

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

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

출력

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

 


<<코드>>

N = int(input()) # 테스트케이스의 개수

for _ in range(N): #테스트케이스를 순서대로 반복
  A = list(map(int,input().split())) #테스트케이스 하나의 값들을 list화 = A
  avg = sum(A[1:])/A[0] # A를 인덱싱/슬라이싱하여 avg값을 구해줬다
  
  count = 0 #카운트를 0으로 설정해주고 A 리스트를 반복한다
  for a in A[1:]: #0은 점수의 수 이므로 제외하고 1부터 끝까지 반복한다
    if a > avg:
      count +=1
    rate = count/A[0]*100 #평균을 넘은 학생의 수(count)를 전체 학생수 A[0] 으로 나누어 비율을 구한다.

  print("{:.3f}%".format(rate)) # "%0.3f %rate + "%" 라고 써도 동일하게 나온다

 

<<결과값>>

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

 


Ah... 나의 시간을 정말 많이 잡아먹은 문제였다. 부들부들 ( ˃̣̣̥᷄⌓˂̣̣̥᷅ )

오류의 원인?

 - 그냥 문자를 자꾸 헷갈림 N 이냐 A 이냐.... (꼼꼼히 볼 것)

 - 소수점 3번째 자리까지 표기하는 것! 은근 오타가 많이난다. 위에 쓴 방법 말고 이렇게 써도 똑같이 나온다!

    print("%0.3f" % rate +"%")

 

- for문 안에 for문이 있었다. 첫번째 for문은 테스트케이스의 수를 돌리고, 두번째 for문은 하나의 테스트케이스에서 평균값 이상을 찾기위해 돌렸다.

 

- 테스트케이스(A)를 list()함수로 list화 해주었다. 맨 앞에 갯수가 표시되어 리스트 인덱싱[0]/슬라이싱[1: ]으로 avg를 구했다. [ 5, 50, 50, 70, 80,100 ] 

- avg 보다 높은 값을 count해서 rate를 구해주고, rate를 소수점 3번째 자리까지 표기! round() 함수는 소수점 끝자리가 0일 경우 출력하지 않아 사용하지 않았다!

 

 

728x90
반응형