상세 컨텐츠

본문 제목

백준 2108번: 통계학

Python/문제풀이

by 코딩하는 낙타 2020. 1. 17. 16:38

본문

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

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

내 풀이:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
num = int(input())
result = [0* 8001
for i in range(num):
    n = int(input())
    result[n+4000+= 1
 
 
sum = 0
for i in range(8001):
    sum += result[i] * (i-4000)
 
if (sum / num) % 1 >= 0.5:
    print(sum//num+1)
else:
    print(sum//num)
 
m=0
for i in range(8001):
    m += result[i]
    if m >= (num//2+1):
        print (i-4000)
        break
 
if result.count(max(result)) != 1:
    t=result.index(max(result))
    result2 = result[t+1:]
 
    print(result2.index(max(result))+t-3999)
 
else:
    print(result.index(max(result))-4000)
 
 
for i in range(8001):
    if result[i] != 0:
        min_num = i-4000
        break
for i in range(8000-1-1):
    if result[i] != 0:
        max_num = i-4000
        break
 
print(max_num - min_num)
 

시간초과

이 문제의 경우 입력받아야 하는 값이 많기 때문에 현재까지는 import sys하여 readline()을 이용하는 것 말고는 방법을 모르겠다. 모듈을 호출하여 문제를 푸는 것은 지양하고 있기 때문에 추후에 다른 풀이 방법을 고안해야 할 것 같다.

관련글 더보기

댓글 영역