[백준-2108] 통계학
문제
코드
import sys
from collections import Counter
input = sys.stdin.readline
n = int(input())
value = []
for _ in range(n) :
value.append(int(input()))
value.sort()
# 산술평균
sAvg = round(sum(value) / n)
print(sAvg)
# 중앙값
mid = (n-1) // 2
print(value[mid])
# 최빈값
if len(value) == 1 :
print(value[0])
else :
cnt = Counter(value)
if len(cnt) == 1 :
print(cnt)
print(max(cnt))
else :
cnt = cnt.most_common(2)
print(cnt)
if cnt[0][1] > cnt[1][1] :
print(cnt[0][0])
elif cnt[0][1] == cnt[1][1] :
print(cnt[1][0])
#범위
print(max(value) - min(value))
풀이
산술평균, 중앙값, 범위는 쉽게 풀 수 있었지만, 최빈값을 구하기가 어려웠다.
처음에는 배열.count(찾을 숫자)를 이용해서 풀었는데 시간초과가 나서 Counter를 사용했다.
(2108번 문제 질문을 찾아보니까 for문 안에 count를 쓰게되면 for문에서도 배열 내에 숫자를 하나씩 찾는데, count에서도 루프를 돌면서 찾게 되어 시간 초과가 발생한다고 한다. 링크)
- 입력값이 1개이면 그대로 출력
- 입력값이 여러 개 일 때 Counter를 이용해서 최빈값을 찾는다.
2-1. 최빈값 리스트에 값이 1개이면 그대로 출력 - 최빈값 리스트에 값이 여러 개이면 최빈값이 가장 큰 순서대로 2개만 저장
3-1. 개수가 다를 경우 첫 번째 값 출력
3-2. 개수가 같을 경우 두 번째 값 출력
Author And Source
이 문제에 관하여([백준-2108] 통계학), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@malgam/백준-2108-통계학저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)