일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 소수
- 프로그래머스
- API
- java
- 라이브템플릿
- beandefinitionstoreexception
- 최단경로
- BFS
- counting elements
- 파이썬
- 백준
- 탐욕법
- HTTP
- codility
- Python
- brute force
- Greedy
- 문자열
- algorithm
- applicationeventpublisher
- springboot
- 알고리즘
- 2018 KAKAO BLIND RECRUITMENT
- 2981
- Spring
- spring security
- Dijkstra
- error
- javascript
- 코딩테스트
Archives
- Today
- Total
Altiora Petamus
통계학 본문
🤔생각해보기
이 문제는 사실상 최빈값을 구하라는 문제. 나머지는 단순한 연산으로도 구할 수 있다.
최빈값을 구하기 위해 여러가지 방법을 썼지만, 시간초과로 해결하지 못했었는데 Counter
를 쓰면 갯수를 세야할 때 아주 편리하다는 것을 알게 되었다.
시간초과
# 최빈값(mode) ; N개의 수들 중 가장 많이 나타나는 값
modes = sorted(numbers, key=lambda x: numbers.count(x), reverse=True)
if len(modes) == 1:
print(modes[0])
else:
for mode in modes:
if mode > modes[0]:
print(mode)
break
- 람다를 써서 정렬해두고 루프를 돌다가 값이 더 큰 값이 오면 두 번째로 작은 값이 되므로 출력하고 루프를 빠져나오는 방식이다.
- 배열의 길이에 따라 시간이 오래걸리게 되서 효율적이지 못한 방식이다.
해결 코드
# 최빈값(mode) ; N개의 수들 중 가장 많이 나타나는 값
def mode(arr):
mode_dict = Counter(arr)
modes = mode_dict.most_common()
if len(arr) > 1:
if modes[0][1] == modes[1][1]:
return modes[1][0]
else:
return modes[0][0]
else:
return modes[0][0]
Counter
를 사용하면 딕셔너리 구조로 만들 수 있고, 그 딕셔너리에서 most_common()
메서드를 사용해서 최빈값을 구할 수 있다. 같은 빈도를 가진다면 원래 시퀀스 순서대로 나열된다.
전체 코드
import sys
from collections import Counter
N = int(sys.stdin.readline())
numbers = sorted([int(sys.stdin.readline()) for _ in range(N)])
# 산술평균 : N개의 수들의 합을 N으로 나눈 값
def mean(arr):
return round(sum(arr) / N)
# 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
def median(arr):
return arr[N // 2]
# 최빈값(mode) ; N개의 수들 중 가장 많이 나타나는 값
def mode(arr):
mode_dict = Counter(arr)
modes = mode_dict.most_common()
if len(arr) > 1:
if modes[0][1] == modes[1][1]:
return modes[1][0]
else:
return modes[0][0]
else:
return modes[0][0]
# 범위 : N의 수들 중 최댓값과 최솟값의 차이
def scope(arr):
return max(arr) - min(arr)
print(mean(numbers))
print(median(numbers))
print(mode(numbers))
print(scope(numbers))
'1day-1algorithm' 카테고리의 다른 글
단어 변환 (0) | 2021.06.25 |
---|---|
블랙잭 (0) | 2021.06.23 |
토마토 (0) | 2021.06.19 |
소수 구하기 (에라토스테네스의 체) (0) | 2021.06.18 |
Odd Occurrences In Array (0) | 2021.06.18 |