[Baekjoon Online Judge] 백준 2108번 통계학
(Python)
(글쓴날 : 2020.04.02)
* Baekjoon Online Judge, 백준 2108번 문제 Python 언어 풀이입니다.
* 소스 코드의 저작권은 글쓴이에게 있습니다.
백준 2108번 통계학
1) 문제
문제 링크 : https://www.acmicpc.net/problem/2108
2) 풀이 과정
N개의 정수가 주어질 때, 첫째 줄에 산술평균, 둘째 줄에 중앙값, 셋째 줄에 최빈값, 넷째 줄에 범위를 출력하는 문제입니다.
문제 자체는 간단하지만, 정수가 하나만 들어오는 케이스, 정수들의 값이 전부 똑같은 케이스 등 여러 가지 케이스들을 고려해 주셔야 합니다.
저의 경우, Python으로 문제를 풀었으며 산술평균은 sum() 함수를 이용해 정수들의 합을 구한 뒤 N으로 나눈 값을 round() 함수를 사용해 소수점 이하 첫째 자리에서 반올림했고, 중앙값은 정수들을 리스트에 저장한 뒤 정렬한 리스트의 가운데 인덱스 값을 참조했습니다.
최빈값은 collections 모듈의 Counter() 함수와 most_common() 함수를 사용해 구했으며 Counter() 함수는 리스트에서 각 값들이 포함되어 있는 개수를 딕셔너리 형태로 반환해 주고, most_common() 함수는 해당 딕셔너리를 튜플로 분할해 해당 key가 가장 많이 포함되어 있는 순, 즉 value 값이 가장 높은 순으로 리스트화해 주는 함수입니다.
마지막으로, 범위는 리스트의 마지막 인덱스 값에서 0번째 인덱스 값을 빼 문제를 해결하였습니다.
3) 코드
* Python 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from collections import Counter
import sys
input = sys.stdin.readline
N = int(input())
numbers = sorted([int(input()) for _ in range(N)])
print(round(sum(numbers) / N))
print(numbers[N // 2])
mode = Counter(numbers).most_common()
print(numbers[0] if len(numbers) == 1 or numbers.count(numbers[0]) == N else mode[0][0] if mode[0][1] != mode[1][1] else mode[1][0])
print(0 if len(numbers) == 1 else numbers[-1] - numbers[0])
|
'Deprecated' 카테고리의 다른 글
[Baekjoon Online Judge] 백준 11650번 좌표 정렬하기(Python) (0) | 2020.04.02 |
---|---|
[Baekjoon Online Judge] 백준 1427번 소트인사이드(Python) (0) | 2020.04.02 |
[Baekjoon Online Judge] 백준 10989번 수 정렬하기 3(C) (0) | 2020.04.02 |
[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2(C) (0) | 2020.04.02 |
[Baekjoon Online Judge] 백준 2750번 수 정렬하기(C) (0) | 2020.04.02 |