2108 통계학
업데이트:
1. 문제
문제는 링크에 들어가면 있다.
2. 정답 코드
문제의 내 정답 코드는 다음과 같다.
import sys
import math
from collections import deque
def first_func(array):
return round(sum(array)/len(array))
def second_func(array):
num = len(array)//2#math.ceil(len(array)/2)
return array[num]
def third_func(counts_dict):
sorted_list =sorted(counts_dict.items(),key=lambda x:(-x[1],x[0]))
if len(sorted_list) == 1 :
return sorted_list[0][0]
else :
# 최빈값이 같다면 2번째꺼 출력 :
if sorted_list[0][1] == sorted_list[1][1] :
return sorted_list[1][0]
else :
return sorted_list[0][0]
def forth_func(array):
if len(array) == 1 :
return 0
else :
return max(array)-min(array)
if __name__ == "__main__":
read = sys.stdin.readline
N = int(read())
sort_list = [0]*(8001)
array = []
counts = dict()
for _ in range(N):
temp = int(read())
array.append(temp)
if not temp in counts :
# 딕셔너리에 key가 없다면
counts[temp] = 1
else :
counts[temp] += 1
array.sort()
print(first_func(array))
print(second_func(array))
print(third_func(counts))
print(forth_func(array))
3. 문제 풀이
이 문제는 구현과 정렬이 섞여있는 문제이다. 그렇게 어려운 문제는 아니지만, 나는 원래 dictionary를 쓰지 않고 풀었었다. 근데 이때 문제는 마이너스 값이 나올때 이다. list는 음의 인덱스를 갖지 않으므로 문제가 항상 발생하지만, dictionary를 사용하면 계수정렬을 쉽게 구현할 수 있다. 앞으로 dictionary를 자주 쓰는 연습을 해보자.