일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- two pointer
- 알고리즘
- Github
- ML
- Algorithm
- 브루트포스
- backtracking
- 백트래킹
- 재귀
- 백준
- OS
- BF
- 투포인터
- sort
- CS
- 파이썬
- Loss
- python3
- Python
- 신나는함수실행
- 머신러닝
- 코테
- 재귀함수
- 완전탐색
- 코딩테스트
- Virtual Memory
- dfs
- 정렬
- 프로그래머스
- 1일1솔
Archives
- Today
- Total
이것저것 공부 기록하기
[Algorithm] 1일1솔 - 백준 2108 통계학 (python3) 본문
문제링크
https://www.acmicpc.net/problem/2108
문제설명
홀수 N개의 값들에 대해 산술평균, 중앙값, 최빈값, 범위를 차례로 구하는 문제로 까다로운 조건이 없었다.
최빈값이 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력해야 하는 조건이 주어졌다.
이 조건에 대해서는 Counter의 most_common으로 2개까지만 구한 후 케이스를 구분하는 방식을 취했다.
most_common으로 최빈값을 구한다면, 중앙값 뿐 아니라 최빈값에 대해서도 정렬을 먼저 고려해야 했기 때문에 입력받은 값들을 담은 배열을 바로 sort로 정렬해주었다. most_common은 각 값마다의 크기는 고려하지 않고 최빈값만 고려하기 때문에, 순서를 고려하여 출력하려면 먼저 정렬을 해주어야 한다.
most_common으로 구한 두 요소의 빈도값이 같으면 두 번째로 작은 값을 출력했으며, 빈도값이 다르면 most_common으로 구한 가장 앞 요소를 출력했다. (일반적인 most_common으로는 최빈값이 가장 큰 순서대로 구해지기 때문이다.)
또한, 최빈값은 주어지는 요소 자체가 1개인 경우(ex. [4000])나 모든 값이 같을 경우(ex. [1,1,1])를 예외 처리하기 위해 2개 이상으로 구해졌을 경우만 고려하였다.
시간초과 방지를 위해 입력값은 sys.stdin.readline()으로 받았다.
문제풀이
import sys
from collections import Counter
n = int(sys.stdin.readline())
tmp = []
for _ in range(n):
tmp.append(int(sys.stdin.readline()))
tmp.sort() # 정렬
# 최빈값 구하기
common = Counter(tmp).most_common(2)
if len(common)==2 and common[0][1] == common[1][1]: # 최빈값이 2개가 구해졌을 경우, 두 요소의 빈도수 비교
common = max(common[0][0],common[1][0])
else:
common = common[0][0]
# 차례대로 출력
print(round(sum(tmp)/n), tmp[n//2], common,tmp[-1]-tmp[0],sep='\n')
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm] 1일1솔 - 백준 15649 N과 M (1) (python3) (0) | 2022.01.12 |
---|---|
[Algorithm] 1일1솔 - 백준 1427 소트인사이드 (python3) (0) | 2022.01.11 |
[Algorithm] 1일1솔 - 백준 10989 수 정렬하기 3 (python3) (0) | 2022.01.07 |
[Algorithm] 1일1솔 - 백준 2751 수 정렬하기2 (python3, PyPy3) (0) | 2022.01.06 |
[Algorithm] 1일1솔 - 백준 1436 영화감독 숌 (python3) (0) | 2022.01.05 |
Comments