백준 2108 - 통계학 (Python3)
코드
input() 사용 (Pypy3)
from collections import Counter
n = int(input())
nums = []
for _ in range(n):
nums.append(int(input()))
nums.sort()
# 산술 평균
print(int(round((sum(nums)/n), 0)))
# 중앙값
print(nums[n // 2])
# 최빈값
ls = Counter(nums).most_common(2)
if (len(ls) > 1):
if ls[0][1] == ls[1][1]:
print(ls[1][0])
else:
print(ls[0][0])
else:
print(ls[0][0])
# 범위
print(max(nums) - min(nums))
sys.stdin.readline() 사용
# 주피터 노트북에서 sys.stdin.readline()은 안됨
import sys
from collections import Counter
n = int(sys.stdin.readline())
nums = []
for _ in range(n):
nums.append(int(sys.stdin.readline()))
nums.sort()
# 산술 평균
print(int(round((sum(nums)/n), 0)))
# 중앙값
print(nums[n // 2])
# 최빈값
# 2번째 최빈값까지 구하기
ls = Counter(nums).most_common(2)
if (len(ls) > 1):
if ls[0][1] == ls[1][1]:
print(ls[1][0])
else:
print(ls[0][0])
else:
print(ls[0][0])
# 범위
print(max(nums) - min(nums))
문제 설명
최빈수를 제외한 나머지는 너무 간단하고, 최빈수의 경우 애를 먹었는데 Counter 라이브러리를 활용하는 방법이 가장 좋은 것 같다.
most_common(2)로 최빈값을 2번째까지 구하고 조건식으로 비교하여 정답을 도출하면 된다. 이 때, most_common함수는 List로 반환되는데 최빈값이 1개인 경우의 조건을 따로 처리하지 않아서 에러를 겪었다.
또한 Python3으로 제출하면 시간 초과가 떠서 sys.stdin.readline()을 사용하여 Python3으로도 정답을 완성했다. (참고로 Jupyter Notebook에선 sys.stdin.readline()이 작동하지 않는다…)
댓글남기기