PS
[백준] 2108번 : 통계학(counter)- 파이썬[Python]
choisanghyun
2022. 1. 10. 23:53
728x90
문제
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
풀이
from collections import Counter
import sys
N=int(sys.stdin.readline())
list1=[]
for i in range(N):
list1.append(int(sys.stdin.readline()))
list1.sort()
print(round(sum(list1)/len(list1)))
print(list1[len(list1)//2])
c_n=Counter(list1).most_common()
if len(c_n)>1:
if c_n[0][1]==c_n[1][1]:
print(c_n[1][0])
else:
print(c_n[0][0])
else:
print(c_n[0][0])
print(max(list1)-min(list1))
파이썬 내장모듈의 counter 함수와 sys를 사용해야 풀리는 문제.
처음에는 for문 으로 count()랑 입력값 하나하나 구하는 코드짜다가
이건 아닌 것 같아서 찾아보니 빈도수를 간편하게 구할 수 있는 counter 함수가 존재했다.
IT초심자인 내가 파이썬의 모든 함수를 아는 것이 아니니 좀 더 효율적으로 공부하려면 브루트 포스 문제가 아닌 이상
간단한걸 구현하는데 너무 복잡한 반복문이 필요하면 해당 함수가 존재하는지 여부부터 알아봐야겠다.
counter 함수를 사용해도 시간초과가 떠서 보니 input()으로 해놔서 시간초과가 된 것이었다.
input()이 너무 손에 익어버려서 풀릴 문제도 안풀리는 경우가 간혹 있다.
sys.stdin.readline()를 사용하는 습관을 들여야겠다.