190201 백준 알고리즘 문제풀기*

|

[2108] 통계학*

문제

  • 산술평균, 중앙값, 최빈값, 범위를 계산하여 출력한다. 소수점 이하 첫째 자리에서 반올림한다.
    • 산술평균 : N개의 수들의 합을 N으로 나눈 값
    • 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값. 여러 값이 중복될 때는 두 번째로 작은 값을 출력
    • 최빈값 : N개의 수들 중 가장 많이 나타나는 값
    • 범위 : N개의 수들 중 최댓값과 최솟값의 차이
  • 아무 생각 없이 사용하던 sys.exit(1)의 정확한 사용법에 대해 알았다.
  • 분명 문제를 맞게 풀었으나 계속 런타임 에러가 발생했고, 찾아보니 sys.exit(1)의 사용이 잘못된 것이었다.
    • sys.exit(1)은 코드상에 문제나 에러(issue or error) 가 발생하여 코드를 종료시킬 때 사용한다. 이로인해 런타임에러가 발생했다.
    • sys.exit(0)은 문제 없이 깨끗하게(clean) 코드를 종료시킬 때 사용한다.
  • 파이썬 list에서 각 값들의 빈도수를 계산할때는 collection라이브러리의 Counter 메서드를 이용한다.
    • Counter(sorted_list)는 해당 멤버가 리스트 안에 몇 개가 존재하는지 짝지어주는 역할을 한다.

정답

import sys
from collections import Counter

t=int(sys.stdin.readline())
if t==1:
    num = int(sys.stdin.readline())
    print(num)
    print(num)
    print(num)
    print(0)
    sys.exit(0)
nums = []
avg = 0
for i in range(t):
    num = int(sys.stdin.readline())
    nums.append(num)
    avg += num
nums = sorted(nums)
print(round(avg/t))
print(nums[t>>1])
cnt = Counter(nums).most_common()
if cnt[0][1] == cnt[1][1]:
    print(cnt[1][0])
else:
    print(cnt[0][0])
print(nums[-1]-nums[0])