https://www.acmicpc.net/problem/2108
풀이
import sys
input = sys.stdin.readline
n = int(input())
dic={}
arr=[]
for _ in range(n):
m = int(input())
if m in dic: dic[m]+=1
else : dic[m]=1
arr.append(m)
dic = sorted(dic.items(),key=lambda x:(-x[1],x[0]))
print(int(round(sum(arr)/n,0)))
print(sorted(arr)[n//2])
if len(dic)<2:
print(dic[0][0])
else:
if dic[0][1] == dic[1][1]:
print(dic[1][0])
else:
print(dic[0][0])
print(max(arr)-min(arr))
산술평균, 중앙값, 최빈값, 범위를 구해야하는 문제이다.
산술평균, 중앙값, 범위는 배열을 이용해서 풀어주었고 최빈값은 딕셔너리를 사용하여 풀어주었다.
- 산술평균은 소수점 이하 첫째 차리에서 반올림한 값을 출력해야하므로 round와 int를 사용해주었다.
- 중앙값은 정렬하고 가장 중앙에 있는 값을 출력해주었다.
- 최빈값은 키는 수, 값은 중복된 갯수로 하여 딕셔너리로 만들어주었다. 그리고 길이가 2보다 작으면 가장 앞의 키를 출력해주었다. 여러개 있을때 최빈값 중 두 번째로 작은 값을 출력해주기 위해서 2보다 크고 첫번째의 값과 두번째의 값이 같으면 즉, 여러개 있으면 dic[1][0]을 출력해주었다.
- 범위는 max와 min을 사용해주었다.
Counter 사용 풀이
import sys
from collections import Counter
input = sys.stdin.readline
n = int(input())
arr=[]
for _ in range(n):
m = int(input())
arr.append(m)
arr.sort()
arr2 = Counter(arr).most_common()
print(round(sum(arr)/n))
print(sorted(arr)[n//2])
if len(arr2)<2:
print(arr2[0][0])
else:
if arr2[0][1] == arr2[1][1]:
print(arr2[1][0])
else:
print(arr2[0][0])
print(max(arr)-min(arr))
Counter을 사용해서 문제를 풀수도 있다.
Counter().most_common()을 사용하면 빈도수가 높은 수 대로 (num,빈도수) 리스트를 만들어준다.
정렬을 해야하므로 Counter을 사용하기 전에 sort를 해주었다.
나머지는 위 풀이와 같다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #15649 - N과 M (1) (4) | 2021.11.30 |
---|---|
[Python] 백준 #18870 - 좌표압축 (1) | 2021.11.28 |
[Python] 백준 #1181 - 단어정렬 (1) | 2021.11.25 |
[Python] 백준 #1427 - 소드인사이드 (0) | 2021.11.23 |
[Python] 백준 #10989 - 수 정렬하기 3 (2) | 2021.11.22 |