-
[백준 / Python] 2108번 통계학 | 초코더알고리즘/백준 2020. 1. 13. 01:42
https://www.acmicpc.net/problem/2108
접근법
산술평균과 중앙값, 범위은 구하는 법이 매우 간단했습니다.
round()함수로 반올림을 해주고, 평균을 구해주면 됩니다. 만약 원소의 갯수가 짝수개라면 중간값 두개의 산술평균을 구해주면 됩니다.
범위는 max()와 min()을 통해 구함
최빈값이 조금 복잡했습니다.
우선 Counter의 most_common()이라는 함수를 이용하면 최빈값을 바로 찾을 수 있었습니다.
most_common(2)를 해주어서 최빈값 2개를 찾아준 후, c[0][1]과 c[1][1]이 같으면(최빈값이 같으면) c[1][0]을 반환 그렇지 않으면 c[0][0] 반환.(정렬되어 있는 리스트에서 최빈값 두개를 차례로 저장해주었으므로 가장 작은 수가 c[0][0]에 그 다음으로 작은 수가 c[1][0]에 저장되어있음)
-> 예를 들면 {(-2:1),(-1:1)} 이런식.
그리고 숫자를 numbers.append(int(input()))으로 입력받으면 시간 초과나므로 import sys를 이용해 한줄씩 입력받기
나의풀이
import sys from collections import Counter N = int(input()) numbers=[] for _ in range(N): numbers.append(int(sys.stdin.readline())) #산술평균 def am(nums): return round((sum(nums)/N)) #중앙값 def median(nums): mid = nums[len(nums)//2] # nums의 개수는 홀수 return mid #최빈값 def mode(nums): if N == 1:return nums[0] c=Counter(nums).most_common(2) return (c[1][0] if c[0][1] == c[1][1] else c[0][0]) #범위 def r(nums):return nums[N-1]-nums[0] numbers.sort() print(am(numbers)) print(median(numbers)) print(mode(numbers)) print(r(numbers))
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / Python] 11004번 K번째 수 | 초코더 (0) 2020.01.13 [백준 / Python] 1026번 보물 | 초코더 (0) 2020.01.13 [백준 / Python] 1181번 단어 정렬 | 초코더 (0) 2020.01.12 [백준 / Python] 11650번 좌표 정렬하기 | 초코더 (0) 2020.01.12 [백준 / Python] 10814번 나이순 정렬 | 초코더 (0) 2020.01.12