문제
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
import sys
N=int(sys.stdin.readline())
num_list=[]
sum=0
for _ in range(N):
num=int(sys.stdin.readline())
num_list.append(num)
for x in num_list:
sum+=x
print(round(sum/N))
num_list.sort()
print(num_list[N//2])
dict={}
for x in num_list:
if x in dict:
dict[x]+=1
else:
dict[x]=0
array_values=list(dict.values())
array_values.sort()
array_keys=[]
for x in dict:
if(dict[x]==array_values[len(array_values)-1]):
array_keys.append(x)
array_keys.sort()
if(len(array_keys)==1):
print(array_keys[0])
else:
print(array_keys[1])
print(num_list[N-1]-num_list[0])
※ 정렬

● 먼저 입력받은 숫자들을 num_list라는 배열에 저장해준다.
★ 산술평균
● sum에 num_list의 숫자를 모두 더해준 후, N으로 나눈 값을 round() 함수를 이용해 반올림 하고 출력
★ 중앙값
● 먼저 num_list를 sort() 함수를 이용하여 정렬한다. N은 홀수이므로 N//2를 인덱스로 하는 num_list의 요소는 중앙값이 된다.
★ 최빈값
● 우선 dict라는 파이썬 딕셔너리를 하나 정의해준다.
● 그 후 num_list를 순회하며 숫자가 dict의 key에 존재하면 그 key의 value값을 1 증가시키고 만약 존재하지 않으면 그 숫자를 key로 하는 value가 0인 요소를 dict에 추가해준다. (value는 그 key 값이 몇 개나 입력되었는지 세는 용도.)
● 그 후, array_values라는 배열에 dict의 value만 따로 담고, 정렬시켜준다.
● 그리고 dict의 key들을 돌며 그 key의 value 값이 array_values 배열의 끝 요소의 값과 같으면
array_keys 라는 배열에 그 key값을 append 해준다.
● 마지막으로 array_keys를 sort() 함수를 이용해 정렬해준 뒤, 만약 array_keys의 길이가 1이면 최빈값이 하나인 것이므로 그 안에 있는 요소를 출력, 만약 길이가 1 이상이면 최빈값이 여러개란 뜻이므로 그 중 두번째로 작은 값인 array_keys[1]을 출력해준다.
★ 범위
● num_list는 정렬되어 있으므로 맨 끝 요소와 맨 처음 요소를 빼면 범위가 나온다.



♣ 참고: 파이썬 딕셔너리
02-5 딕셔너리 자료형
[TOC] ## 딕셔너리란? 사람은 누구든지 이름 = 홍길동, 생일 = 몇 월 며칠 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 ...
wikidocs.net
'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 10815번: 숫자 카드(실버 5, 파이썬 PYTHON) - 집합과 맵 (2) | 2022.09.05 |
---|---|
백준(baekjoon) 18870번: 좌표 압축(실버 2, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |
백준(baekjoon) 2751번: 수 정렬하기 2 (실버 5, 파이썬 PYTHON) - 정렬 (0) | 2022.09.04 |
백준(baekjoon) 1018번: 체스판 다시 칠하기(실버 4, 파이썬 PYTHON) - 브루트 포스 (0) | 2022.09.03 |
백준(baekjoon) 11729번: 하노이 탑(실버 1, 파이썬 PYTHON) - 재귀 (0) | 2022.09.01 |
문제
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
import sys
N=int(sys.stdin.readline())
num_list=[]
sum=0
for _ in range(N):
num=int(sys.stdin.readline())
num_list.append(num)
for x in num_list:
sum+=x
print(round(sum/N))
num_list.sort()
print(num_list[N//2])
dict={}
for x in num_list:
if x in dict:
dict[x]+=1
else:
dict[x]=0
array_values=list(dict.values())
array_values.sort()
array_keys=[]
for x in dict:
if(dict[x]==array_values[len(array_values)-1]):
array_keys.append(x)
array_keys.sort()
if(len(array_keys)==1):
print(array_keys[0])
else:
print(array_keys[1])
print(num_list[N-1]-num_list[0])
※ 정렬

● 먼저 입력받은 숫자들을 num_list라는 배열에 저장해준다.
★ 산술평균
● sum에 num_list의 숫자를 모두 더해준 후, N으로 나눈 값을 round() 함수를 이용해 반올림 하고 출력
★ 중앙값
● 먼저 num_list를 sort() 함수를 이용하여 정렬한다. N은 홀수이므로 N//2를 인덱스로 하는 num_list의 요소는 중앙값이 된다.
★ 최빈값
● 우선 dict라는 파이썬 딕셔너리를 하나 정의해준다.
● 그 후 num_list를 순회하며 숫자가 dict의 key에 존재하면 그 key의 value값을 1 증가시키고 만약 존재하지 않으면 그 숫자를 key로 하는 value가 0인 요소를 dict에 추가해준다. (value는 그 key 값이 몇 개나 입력되었는지 세는 용도.)
● 그 후, array_values라는 배열에 dict의 value만 따로 담고, 정렬시켜준다.
● 그리고 dict의 key들을 돌며 그 key의 value 값이 array_values 배열의 끝 요소의 값과 같으면
array_keys 라는 배열에 그 key값을 append 해준다.
● 마지막으로 array_keys를 sort() 함수를 이용해 정렬해준 뒤, 만약 array_keys의 길이가 1이면 최빈값이 하나인 것이므로 그 안에 있는 요소를 출력, 만약 길이가 1 이상이면 최빈값이 여러개란 뜻이므로 그 중 두번째로 작은 값인 array_keys[1]을 출력해준다.
★ 범위
● num_list는 정렬되어 있으므로 맨 끝 요소와 맨 처음 요소를 빼면 범위가 나온다.



♣ 참고: 파이썬 딕셔너리
02-5 딕셔너리 자료형
[TOC] ## 딕셔너리란? 사람은 누구든지 이름 = 홍길동, 생일 = 몇 월 며칠 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 ...
wikidocs.net
'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 10815번: 숫자 카드(실버 5, 파이썬 PYTHON) - 집합과 맵 (2) | 2022.09.05 |
---|---|
백준(baekjoon) 18870번: 좌표 압축(실버 2, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |
백준(baekjoon) 2751번: 수 정렬하기 2 (실버 5, 파이썬 PYTHON) - 정렬 (0) | 2022.09.04 |
백준(baekjoon) 1018번: 체스판 다시 칠하기(실버 4, 파이썬 PYTHON) - 브루트 포스 (0) | 2022.09.03 |
백준(baekjoon) 11729번: 하노이 탑(실버 1, 파이썬 PYTHON) - 재귀 (0) | 2022.09.01 |