반응형

   문제

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




정렬된 데이터는 통계의 많은 부분에서 사용될 것이다.

이번문제는 정렬을  통해 통계값들을 구하는 빠르게 구해야 한다.

 메모리제한은 거의 없다고 보면되지만 시간에 제한이 있다.

입력값이 절댓값 4000을 넘지않는 정수라는 부분이 핵심이다.

먼저 데이터의 정렬을 통해 빠르게 사용할수 있도록 만들어준뒤 통계값들을 구해야겠다.



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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#계수정렬(counting sort)
import sys
 
n=int(sys.stdin.readline())
 
num_list=[]
result_list=[0 for _ in range(8001)]   #받을수의 최대값에 따라 배열을 만든다.    -4000=>[0] 0=>[4000] 4000=>[8000]
#0~8000 8001개
for i in range(n):  #받을때마다 해당인덱스에 넣어준다.
   result_list[int(sys.stdin.readline())+4000]+=1
 
###################################################################################
#산술평균
sum=0
for i in range(len(result_list)):
   for j in range(result_list[i]):
      sum+=i-4000
#반올림
#https://wikidocs.net/21113
#https://www.acmicpc.net/board/view/33445 round함수 2.5일때
avg=round(sum/n+0.000001)
 
 
print(avg)
###################################################################################
#중앙값
mid=n//2+1#중앙값의 위치 N값이 홀수이므로
midsum=0 #각배열의 개수를 더해가며 중앙값을 넘겼을때 반환
midvalue=0
for i in range(len(result_list)):
   midsum+=result_list[i]
   if midsum>=mid:
      midvalue=i-4000
      break
 
print(midvalue)
###################################################################################
 
#최빈값
mode=9999#최빈값
mode_count=0#횟수
mode_check=0#횟수가 같으면 두번째로 작은값 찾기
for i in range(len(result_list)):
   if result_list[i]==mode_count and mode_check==1:#횟수가 같으면
      mode_check=2                 #다음에 같은횟수가 나와도 바꿔주지 않기위해 설정
      mode=i-4000
   elif result_list[i]>mode_count: #더많은 횟수가 나오면
      mode_count=result_list[i]     #나온횟수
      mode=i-4000                   #mode값
      mode_check=1                  
 
print(mode)
 
 
###########################################################################################
 
#범위
min=9999
min_check=0
max=0
for i in range(len(result_list)):   #처음 0보다 큰값이 나오면 min 마지막에 나오는값이 max
   if result_list[i]>0:
      if min_check==0:
         min=i-4000
         min_check=1
      max=i-4000
 
range=max-min
print(range)

cs


코드 설명은 따로 하지 않겠다.
파이썬의 round함수에 대해선 조금 알필요가 있는거같다.





반응형

'알고리즘(python) > 정렬' 카테고리의 다른 글

[Python]정렬 백준 11650  (0) 2020.01.01
[Python]정렬 백준 1427  (0) 2020.01.01
[Python]정렬 백준 10989  (0) 2019.12.25
[Python]정렬 백준 2751  (0) 2019.12.24
[Python]정렬 백준 2750  (0) 2019.12.23
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기