백준 2108번
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
num = int(input())
numList = []
mList = []
for i in range(num):
numList.append(input())
mDict = {}
vList = [x in range(-4000, 4001)]
for i in range(8000):
sorted(numList)
avg = sum(numList) // num
md = numList[num // 2]
# 최빈값
cnt =
최빈값을 구하기 위해 어떻게 해야할지 생각해보았다
-
80000개의 원소를 가지고 있는 리스트를 생성해서 나온수만큼 카운팅을 한다 -> 이렇게 하려면 8000개의 리스트를 매번 input 값이 들어올때마다 equal 체크를 해야하므로 시간이 너무 오래걸린다 ㅠㅠㅠ
-
python 모듈을 쓴다 -> 내가 잘 모른당..
from collections import Counter
num = int(input())
numList = []
mList = []
for i in range(num):
numList.append(int(input()))
sorted(numList)
# 평균값
print(sum(numList) // num)
# 중앙값
print(numList[num // 2])
# 최빈값
cnt = Counter(numList).most_common(2)
if len(cnt) > 1:
if cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else: print(cnt[0][0])
else: print(cnt[0][0])
# 최대값 - 최소값
print(max(numList) - min(numList))
그래서 collections 모듈 공부를 해보았다
collections엔 다양한 함수들이 있는데, 그중 Counter 클래스는 리스트를 받는데 그 리스트 안의 동일한 값의 개수를 세어주는 함수이다.
그 중 Counter 클래수 안의 most_common 메소드는 가장 동일개수가 높은 값을 출력해주는데, 안에 숫자를 받는다.
그 숫자는 몇 번째로 동일한 값이 많은지를 봐주는 값이다.
그래서 위 문제에서 최빈값은 가장 동일한 값이 많은 값을 출력하되, 동일값이 높은 개수도 또한 동일할때, 두 번째로 작은 값을 출력하도록 한다.
위 most_commons 메소드로 2를 주면, 가장 동일한 값이 많은 아이를 출력해주되, 여러개면, 그중 작은 값부터 두 개를 출력하게 된다. 그렇게 if문으로 판별하여 print함
그런데 오잉 왜 틀렸지!!!
from collections import Counter
num = int(input())
numList = []
for i in range(num):
numList.append(int(input()))
sList = sorted(numList)
# 평균값
print(sum(sList) // num)
# 중앙값
print(sList[num//2])
# 최빈값
cnt = Counter(sList).most_common(2)
if num > 1:
if cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else: print(cnt[0][0])
else: print(cnt[0][0])
# 최대값 - 최소값
print(max(sList) - min(sList))
sorted함수 적용한 리스트를 다시 받아줘서 쓰니 해결!
으악 이제 그만
import sys
from collections import Counter
num = int(sys.stdin.readline())
numList = []
for i in range(num):
numList.append(int(sys.stdin.readline()))
sList = sorted(numList)
# 평균값
print(sum(sList) // num)
# 중앙값
print(sList[num//2])
# 최빈값
cnt = Counter(sList).most_common(2)
if num > 1:
if cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else: print(cnt[0][0])
else: print(cnt[0][0])
# 최대값 - 최소값
print(max(sList) - min(sList))
뭔데 대체… 짜증 보기로는 다 맞았는데여…
++ 근데.. 이거 이후로 다시 볼일이 있을까 ㅎㅎㅎ