개발 연습장/백준 문제풀이

[파이썬, Python] 백준 2108: 통계학

LooanCheong 2023. 1. 4. 20:17
반응형

문제

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

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

코드

from collections import Counter
import sys

n = int(sys.stdin.readline())
num = []
mode = []
for _ in range(n):
    num.append(int(sys.stdin.readline()))
num_most = Counter(num).most_common()
num.sort()
print(round((sum(num)/n)))
print(num[n//2])
for i in num_most:
    if i[1] == num_most[0][1]:
        mode.append(i[0])
    else:
        break
if len(mode) == 1:
    print(mode[0])
else:
    mode.sort()
    print(mode[1])
print(max(num)-min(num))

설명

처음에는 numpy를 이용하여 풀려고 했었는데,
아쉽게도 외부 모듈은 사용이 불가능했다.

그래서 처음으로 Counter라는 모듈을 사용해봤다.
수의 개수를 카운트해서 최빈값을 찾을 수 있었다.

이후 산술평균은 전체 수를 더한 것에서 n으로 나눈 값을 round해주어 반올림했고,
중앙값은 인덱스의 중앙값을 구해서(n을 2로 나누어서) 출력했으며,
최빈값의 경우는 mode의 개수가 1개이면 그냥 출력하고,
2개 이상이면 정렬을 해서 2번째로 작은 값을 출력해주었다.
범위의 경우는 가장 큰 수에서 작은 수를 빼주어서 출력하였다.

반응형