본문 바로가기
PS/수학

[백준] 18110번: solved.ac 파이썬

by 3급우사기 2024. 3. 2.

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

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

왜 시간초과지?

 

간단한 문제라고 생각해서 바로 코드 짜서 돌렸더니 

시 간 초 과

 

오잉? 시간복잡도도 괜찮은데 왜지?

 

이유는 input() 때문이었다.

입력으로 주어지는 숫자 개수가 10의5승.........짱많음

 

이런 경우엔 input()말고 sys.stdin.readline()을 써야 빠른 입력을 할 수 있다.

 

풀이
import math, sys
n = int(sys.stdin.readline())

if(n == 0):
  print(0)
else:
  arr = [0] * n
  check = math.floor(n*0.15+0.5)
  sum = 0

  for i in range(n):
    arr[i] = int(sys.stdin.readline())

  arr.sort()

  for i in range(check, n - check):
    sum += arr[i]

  average = math.floor(sum / (n - 2*check) + 0.5)
  print(average)