이번꺼 어떻게 해야하는지 알면서도 헤맸던 문제였던거 같다. 계속 시간초과가 나와서 좀더 빠르게 할수 있는 방법이 있는지 찾아보기도 하다가. collection을 알게 되었다.
예전에 악성코드 분석할때 전처리 과정에서 사용해보라는 추천을 받았던 기억이 난다. 물론 난 이전 방법이 다루기가 편해서 굳이 사용해보지 않았지만 이번에 사용해 볼 수 있었다.
collections모듈을 데이터 처리를 할때 자주 사용된다고 한다. 합을 구하거나 중복수를 찾거나 하는경우 Counter객체를 사용한다고 한다. 따라서 이 객체를 사용해보았다.
Counter는 딕셔너리 형태처럼 사용된다. 따라서 딕셔너리에서 사용가능한 함수들을 사용가능하다.
Counter에서 중요한 함수는 most_common이다. 이 함수를 사용하면 가장 많이 사용된 데이터를 기준으로 정렬을 하게된다. 기존에 객체만 선언하게 되면 Counter객체에 속해 있기 때문에 숫자 인덱스로 접근이 불가능하다. 따라서 most_common을 사용해서 리스트로 값을 받아내면 편하게 사용가능하다.
import sys
import math
n = int(input())
tmp = []
for _ in range(n):
i = int(sys.stdin.readline())
tmp.append(i)
tmp = sorted(tmp)
print(round(sum(tmp)/n))# 평균
print(tmp[n//2])# 중앙값
from collections import Counter
c = Counter(tmp).most_common(2) # 중복수가 많은것을 순위대로 2개 뽑는다.
if n == 1:
print(tmp[0])
else:
if c[0][1] == c[1][1]:
print(c[1][0])
else:
print(c[0][0])
print(tmp[-1] - tmp[0])
'알고리즘' 카테고리의 다른 글
백준 15649 풀이 (재귀함수, 백트래킹) (0) | 2021.02.15 |
---|---|
백준 11651 풀이 (sort, 여러 인자 정렬하기) (0) | 2021.02.14 |
#4 알고리즘 공부 2/12 리뷰 (0) | 2021.02.12 |
백준 2751 풀이 (힙정렬) (0) | 2021.02.12 |
백준 11729 풀이 (하노이탑) (0) | 2021.02.11 |