본문 바로가기
프로그래밍/알고리즘

[BOJ][Python] 2108번 - 통계학[정렬- 실버 3티어]

by 우주를놀라게하자 2022. 3. 13.
반응형
SMALL

알고리즘 태그

[정렬]

태그 설명

정렬이란 데이터의 집합을 어떠한 기준의 대소관계를 따져 일정한 순서로 줄지어 세우는것

문제

백준 문제 - 통계학

링크: 통계학

문제설명

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

정렬문제지만 구현과 크게 다르지 않다. 여기서 주의할것은 최빈값만 잘 구하면 무사통과일 것 같은 느낌적인 느낌이 온다.
 

예제 입력 1

1
4000

예제 출력 1

4000
4000
4000
0

예제 입력 2

5
-1
-2
-3
-1
-2

예제 출력 2

-2
-2
-1
2

 

📃 소스코드 및 설명

from collections import Counter
# import sys
N = int(sys.stdin.readline())
numbers = []
for _ in range(N):
     numbers.append(int(sys.stdin.readline()))  
numbers.sort()  

# Counter함수를 사용하여 최빈값을 구할 수 있다
# 딕셔너리 형태로 반환
# most_common함수를 통해서 리스트+튜플형으로 최빈값을 구할 수 있다.
mode_numbers = Counter(numbers).most_common()
print(round(sum(numbers)/N))
print(numbers[N//2])
if len(mode_numbers) > 1:
  if mode_numbers[0][1] == mode_numbers[1][1]:
    print(mode_numbers[1][0])
  else:
    print(mode_numbers[0][0])
else:
  print(mode_numbers[0][0])
print(max(numbers)-min(numbers))

* 문제를 풀기 시작하면서 느낀점인데, 로직은 통과가 되더라도 가끔 입력을 받는 부분(input())에서
시간초과가 발생할 때가 있다. 그걸 방지하기 위해서 
sys를 import해서 sys.stdin.readline() 함수를 통해서 진행해야할것같다!

 

 

 

반응형
LIST