728x90
문제-https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
코드
import sys
N = int(sys.stdin.readline())
a = []
p3 = []
dic = {}
for i in range(N):
a.append(int(sys.stdin.readline()))
a.sort()
print(round(sum(a)/N))
print(a[int(N/2)])
| N | 입력받을 수 |
| a | 입력 받아 저장할 리스트 |
| p3 | 최빈값 |
| dic | 최빈값 구하기 위한 딕셔너리 |
-시간 초과의 이유로 sys.stdin.readline()을 사용하였다.
-첫 번째 출력값은 평균, 첫째 자릿수에서 반올림을 위해 round를 사용하였다.
-두 번째 출력값은 중앙값으로 정렬된 리스트를 이용해 N/2를 하여 값을 출력한다.
for i in a:
try:
dic[i] += 1
except KeyError:
dic[i] = 1
dic_max=max(dic.values())
for i in dic:
if(dic[i]==dic_max):
p3.append(i)
if(len(p3)==1):
print(p3[0])
else:
print(p3[1])
print(a[N-1]-a[0])
-세 번째 값은 딕셔너리를 사용해 딕셔너리에 있다면 value에 +1을, 없으면 오류가 뜨기에 이를 try, except를 이용하여 새로 값을 추가해 준다.
-값 중 최댓값을 구하는 함수(max)에서 dic.values()를 이용하여 최대 빈도수를 저장한다. 이후 for문을 이용하여 p3에 최댓값을 저장, 만약 한 개면 바로 출력, 아니라면 2번째 값을 출력한다.
-여기서 순서대로 리스트에 삽입되어 따로 정렬 필요 X
-네 번째 값은 빈도수기에 최댓값-최솟값을 해준다.
결과
input:
5
-1
-2
-3
-1
-2
ouput:
-2
-2
-1
2
728x90
'백준 문제 > 파이썬' 카테고리의 다른 글
| 백준 11399 ATM(python)-[sliver(4)] (2) | 2023.10.11 |
|---|---|
| 백준 10773 제로(python)-[sliver(4)] (5) | 2023.10.06 |
| 백준 1181 단어 정렬(python)-[sliver(5)] (6) | 2023.09.26 |
| 백준 1940 주몽(python)-[sliver(4)] (1) | 2023.09.04 |
| 백준 1599 민식어(python)-[Gold(5)] (5) | 2023.08.29 |