190201 백준 알고리즘 문제풀기*
01 Feb 2019 | baekjoon[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])