https://www.acmicpc.net/problem/2108
최빈값 코드 짜는 게 생각보다 오래 걸렸음
# 2108
N = int(input())
N_list = []
for i in range(N):
N_list.append(int(input()))
# 산술평균
print(round(sum(N_list)/N))
# 중앙값
if N % 2 == 0: # N이 짝수
print(sum(sorted(N_list)[N//2:N//2+2])/2)
else: # N이 홀수
print(sorted(N_list)[N//2])
# 최빈값
check = []
count = []
for n in sorted(N_list):
if n not in check:
check.append(n)
count.append(1)
else:
for idx, val in enumerate(check):
if val == n:
count[idx] +=1
break
max_N = max(count)
final = []
for i, v in enumerate(count):
if v == max_N:
final.append(check[i])
try:
print(sorted(final)[1])
except:
print(sorted(final)[0])
# 범위
print(sorted(N_list)[-1] - sorted(N_list)[0])
근데 시간초과 났음..
파이썬의 from collections import Counter
이용
Counter(N_list).most_common()
이렇게 하면 N_list의 원소의 unique와 그 원소들의 빈도수를 튜플로 반환한 값이 나옴
아래 예시
N_list = [-1, -2, -3, -1, -2]
print(Counter(N_list).most_common())
[(-1, 2), (-2, 2), (-3, 1)]
이걸 이용해서 최빈값 구하기 완성!
# 2108
N = int(input())
N_list = []
for i in range(N):
N_list.append(int(input()))
# 산술평균
print(round(sum(N_list)/N))
# 중앙값
if N % 2 == 0: # N이 짝수
print(sum(sorted(N_list)[N//2:N//2+2])/2)
else: # N이 홀수
print(sorted(N_list)[N//2])
# 최빈값
from collections import Counter
mc = Counter(N_list).most_common()
final = [mc[0][0]]
for i in range(len(mc)-1):
if mc[i+1][1] == mc[0][1]:
final.append(mc[i+1][0])
try:
print(sorted(final)[1])
except:
print(sorted(final)[0])
# 범위
print(sorted(N_list)[-1] - sorted(N_list)[0])
근데 또 시간 초과 났음..
input()을 sys.stdin.readline()으로 변경해서 해결
최종
# 2108
import sys
N = int(sys.stdin.readline())
N_list = []
for i in range(N):
N_list.append(int(sys.stdin.readline()))
# 산술평균
print(round(sum(N_list)/N))
# 중앙값
if N % 2 == 0: # N이 짝수
print(sum(sorted(N_list)[N//2:N//2+2])/2)
else: # N이 홀수
print(sorted(N_list)[N//2])
# 최빈값
from collections import Counter
mc = Counter(N_list).most_common()
final = [mc[0][0]]
for i in range(len(mc)-1):
if mc[i+1][1] == mc[0][1]:
final.append(mc[i+1][0])
try:
print(sorted(final)[1])
except:
print(sorted(final)[0])
# 범위
print(sorted(N_list)[-1] - sorted(N_list)[0])
1
4000
4000
4000
4000
0
5
-1
-2
-3
-1
-2
-2
-2
-1
2
Jupyter Notebook에서는 제대로 지원을 안 해서 오류 발생..
다른 방법도 있을까?