알고리즘/sorting

백준 2108 파이썬(정렬)

Aytekin 2021. 10. 8. 16:00
728x90

통계학에서 주로 사용되는 개념들을 직접 구현해보라고 만든 문제인 것 같다.

 

산술평균이나, 중앙값, 범위 구하는 문제는 max,min,sum,등등 파이썬 내장함수를 이용하면 어렵지 않게 구할 수 있는 문제다.

 

특별히 최빈값을 구할때 collections 모듈에서 Counter클래스 썻다.

코딩테스트에서는 다른 라이브러리를 불러오지 못하게 하는 경우도 있다고 들어서

이런 모듈을 불러와서 문제를 풀어도 될지에 대해서 불안하지만

Counter함수에 대해서 공부도 할겸 구글링하면서 풀어보았다.

 

여기에 counter에 대한 documentation이 있다.

https://docs.python.org/ko/3/library/collections.html#collections.Counter

 

collections — 컨테이너 데이터형 — Python 3.10.0 문서

collections — 컨테이너 데이터형 소스 코드: Lib/collections/__init__.py 이 모듈은 파이썬의 범용 내장 컨테이너 dict, list, set 및 tuple에 대한 대안을 제공하는 특수 컨테이너 데이터형을 구현합니다. named

docs.python.org

 

Counter함수는 iterable한 객체에 대해서 딕셔너리 형태로 만들어주는 클래스이다

요소가 딕셔너리 키로 저장되고 개수가 딕셔너리값으로 저장된다. 

 

most_common()이라는 매서드가 있는데

이를 활용하면 최빈값을 쉽게 구할 수 있다.

# 2108 백준 - 통계학
import sys

li = []
n = int(sys.stdin.readline())
for _ in range(n):
    li.append(int(sys.stdin.readline()))

# li = []
# n = int(input())
# for _ in range(n):
#     li.append(int(input()))

# 파이썬 내장함수 이용해서 오름차순 정렬
li.sort()

# 산술평균(mean)
print(round(sum(li)/n))

# 중앙값(median)
print(sorted(li)[n//2]) 

# 최빈값(mod)
from collections import Counter
c = Counter(li).most_common()
if len(c) > 1:
    if c[0][1] == c[1][1]:
        print(c[1][0])
    else:
        print(c[0][0])
else:
    print(c[0][0])

# 범위(scope)
print(max(li) - min(li))
728x90

'알고리즘 > sorting' 카테고리의 다른 글

백준 10989 파이썬(계수정렬)  (0) 2021.10.07
백준 2751 파이썬(정렬)  (0) 2021.10.06