백준 알고리즘 2018 (통계학)
> https://www.acmicpc.net/problem/2108
산술평균, 중앙값, 범위는 모두 sort 후에 간단하게 해결된다.
여기서 고민할 부분은 최빈값. 게다가 생각해볼 조건도 있다.
먼저, 최빈값을 구하기 위해서 count에 적합한 dictionary를 활용했다.
(dictionary가 list보다 검색이 빠르다는 장점)
([from collections import Counter] 방법도 결국 dictionary의 확장)
1. dic={}에 각 keys(N개의 수)에 맞는 values(count 값들)을 지정.
2. lines 값을 dic에 대입시켜보며 max value의 key 값들만 저장.
(불필요한 반복을 줄이기 위해 set(lines)을 이용하여 중복을 제거했다.)
3. result를 sort시켜 2개 이상인 경우 result[1]. 아닌 경우 result[0] 출력
[Code]
import sys
input = sys.stdin.readline
N = int(input())
lines = [int(input().rstrip()) for _ in range(N)]
lines.sort()
# 산술평균 출력
print(round(sum(lines) / N)) # 반올림
# 중앙값 출력
print(lines[N//2]) # N은 홀수
# 최빈값 구하기
dic = {} # count에 용이한 dictionary
for line in lines:
if line in dic: # 등록되어 있으면 value + 1
dic[line] += 1
else:
dic[line] = 1 # 없다면 등록
max_value = max(dic.values())
result = []
for line in set(lines): # 중복 제거
if dic[line] == max_value:
result.append(line) # max value의 key 저장
result.sort()
# 최빈값 출력
print(result[1] if len(result) > 1 else result[0]) # 2개 이상 고려
# 범위 출력
print(lines[-1] - lines[0])
728x90
'백준 알고리즘(BOJ)' 카테고리의 다른 글
백준 알고리즘 1012 (유기농 배추) - python (재풀이) (0) | 2022.05.07 |
---|---|
백준 알고리즘 11047 (동전 0) - python (0) | 2021.07.28 |
백준 알고리즘 11653 (소인수분해) - python (0) | 2021.07.20 |
백준 알고리즘 1932 (정수 삼각형) - C++, Python (0) | 2019.11.15 |
백준 알고리즘 2630 (색종이 만들기) - C++, Python (0) | 2019.11.08 |
댓글