728x90
반응형
Silver IV
# 2108 통계학
링크 : https://www.acmicpc.net/problem/2108
풀이
import sys
from collections import Counter
N = int(sys.stdin.readline())
li = sorted([int(sys.stdin.readline()) for i in range(N)])
c = Counter(li).most_common(2)
# 산술평균
print(round(sum(li)/len(li)))
# 중앙값
print(li[N//2])
# 최빈값
if len(c)>=2:
if c[0][1] != c[1][1]:
print(c[0][0])
elif c[0][1] == c[1][1]:
print(c[1][0])
else:
print(c[0][0])
# 범위
print(max(li)-min(li))
후기
- 최빈값을 구하는 과정이 가장 포인트인 문제였다.
- Counter(list) 모듈을 사용해서 최빈값을 구할 수 있다.
cf. 대문자 입력에 주의할 것 - Counter 모듈의 most_common(n) 매서드는 가장 빈번한 값을 우선순위로 n개를 반환한다.
- 최빈값이 여러 개 존재할 때, 최빈값의 첫 번째 값과 두 번째 값을 비교한다.
두 값이 같다면 두 번째로 작은 값을 출력하고 같지 않다면 첫 번째 값을 출력함으로써 문제의 조건을 달성할 수 있다. - 최빈값이 1개만 존재할 경우 해당 값을 출력해주는 else문을 작성해야 indexerror를 방지할 수 있다.
'Algorithm Study > Python' 카테고리의 다른 글
[백준 파이썬] # 1920 수 찾기 (0) | 2022.02.21 |
---|---|
[백준 파이썬] # 10989 수 정렬하기 3 (0) | 2022.02.21 |
[백준 파이썬] # 11651 좌표 정렬하기 2 (0) | 2022.02.20 |
[백준 파이썬] # 10866 덱 (0) | 2022.02.20 |
[백준 파이썬] # 1978 소수 찾기 (0) | 2022.02.19 |