[백준 2108번-파이썬]통계학
백준 (BOJ) 11729번
https://www.acmicpc.net/problem/2108
사용언어 : PYTHON
1.문제
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
산술평균 : N개의 수들의 합을 N으로 나눈 값
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
최빈값 : N개의 수들 중 가장 많이 나타나는 값
범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
2.풀이
최빈값을 구하는 것이 문제였는데,
파이썬의 내장 함수인 Collection모듈의 Counter을 사용하여 해결 할 수 있었다.
Counter함수
보통은 dictionary를 사용하여 문자열에 있는 각 알페벳의 갯수를 카운팅을 한다.
def countLetters(word):
counter={}
for letter in word:
if letter not in counter:
counter[letter]=0
counter[letter]+=1
return counter
counterLetter('hello world')
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
이것을 Counter함수를 사용하면 쉽게 구현 할 수 있었다.
from collections import Counter
print(Counter('hello world'))
# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
딕셔너리 형태로 반환 되기때문에, 루프 형태로 돌릴 수 도 있다.
value='hello world'
countValue=Counter(value)
for key,value in countValue.items():
print(key,':',value)
h : 1
e : 1
l : 3
o : 2
: 1
w : 1
r : 1
d : 1
추가로 most_common() 메소드를 사용하여 상위요소를 반환 할 수도 있다.
from collections import Counter
print(Counter('hello world').most_common())
# [('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
이때 인자로 숫자 k를 넣어주면 상위 k개의 데이터를 얻을 수도 있다.
from collections import Counter
print(Counter('hello world').most_common(1))
# [('l', 3)]
3.코드
import sys
from collections import Counter
N=int(sys.stdin.readline())
l=[]
for _ in range(N):
l.append(int(sys.stdin.readline()))
cnt=[]
l.sort()
print(round(sum(l)/N))
print(l[N//2])
counter_l=Counter(l).most_common()
if len(counter_l)>1 and counter_l[0][1]==counter_l[1][1]:
print(counter_l[1][0])
else:
print(counter_l[0][0])
print(max(l)-min(l))
댓글남기기