http://acmicpc.net/problem/2108
{코드}
import sys
from collections import Counter
def input():
return int(sys.stdin.readline())
def print(v):
sys.stdout.write(str(v)+'\n')
n = input()
data = sorted([input() for _ in range(n)])
print(round(sum(data) / n)) # 평균
print(data[n // 2]) # 중앙값
# 최빈값
count = Counter(data).most_common()
if len(count) > 1 and count[0][1] == count[1][1]:
print(count[1][0])
else:
print(count[0][0])
print(data[-1] - data[0]) # 범위
{설명}
평균, 중앙값, 범위는 따로 설명하지 않겠습니다.
최빈값은 등장한 횟수를 통해서 구하기 때문에 Counter라는 클래스를 사용하여 각 숫자가 몇 번 등장했는지 파악한다.
(Counter는 정렬되지 않은 상태이므로 most_common을 통해 정렬된 리스트를 반환합니다.)
most_common을 통해 반환된 결과는 (수, 횟수)의 형태를 띠기 때문에 만약 첫번째와 두 번째가 같은 횟수를 가진다면 두 번째 값을 출력하고 아니라면 첫 번째 값이 가장 많이 나타난 수이므로 이를 출력한다.
여기서 쓰는 Counter는 set을 통해서도 같은 효과를 만들어낼 수 있으나 시간초과가 나게 된다.
(대부분의 경우 라이브러리는 더 빠른 속도를 낸다고 생각하면 된다.)
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 11650번-파이썬/Python] 좌표 정렬하기 (0) | 2020.12.30 |
---|---|
[백준 1427번-파이썬/Python] 소트인사이드 (0) | 2020.12.29 |
[백준 10989번-파이썬/Python] 수 정렬하기 3 (0) | 2020.12.28 |
[백준 2751번-파이썬/Python] 수 정렬하기 2 (0) | 2020.12.28 |
[백준 2750번-파이썬/Python] 수 정렬하기 (0) | 2020.12.26 |