1 분 소요

1. 문제

https://www.acmicpc.net/problem/2108

  • 정렬 문제
// 문제
수를 처리하는 것은 통계학에서 상당히 중요한 일이다.
통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다.
, N은 홀수라고 가정하자.

산술평균 : N개의 수들의 합을 N으로 나눈 
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우  중앙에 위치하는 
최빈값 : N개의 수들  가장 많이 나타나는 
범위 : N개의 수들  최댓값과 최솟값의 차이
N개의 수가 주어졌을 ,  가지 기본 통계값을 구하는 프로그램을 작성하시오.

// 입력
첫째 줄에 수의 개수 N(1  N  500,000) 주어진다. , N은 홀수이다.
 다음 N개의 줄에는 정수들이 주어진다.
입력되는 정수의 절댓값은 4,000 넘지 않는다.

// 출력
첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
둘째 줄에는 중앙값을 출력한다.
셋째 줄에는 최빈값을 출력한다. 여러  있을 때에는 최빈값   번째로 작은 값을 출력한다.
넷째 줄에는 범위를 출력한다.

// 예제 입력 1
5
1
3
8
-2
2

// 예제 출력 1
2
2
1
10

// 예제 입력 2
1
4000

// 예제 출력 2
4000
4000
4000
0

// 예제 입력 3
5
-1
-2
-3
-1
-2

// 예제 출력 3
-2
-2
-1
2

// 예제 입력 4
3
0
0
-1

// 예제 출력 4
0
0
0
1

(0 + 0 + (-1)) / 3 = -0.333333... 이고 이를 첫째 자리에서 반올림하면 0이다. -0으로 출력하면 안된다.


2. 핵심 아이디어

  • Counter 라이브러리를 사용해 개수 체크
  • O(nlogn) 안에 처리


3. Python 문제풀이

import sys
from collections import Counter
input = sys.stdin.readline

n = int(input())
num = []

for i in range(n) :
  num.append(int(input()))

num.sort()
nums_s = Counter(num).most_common()

print(round(sum(num) / n))
print(num[n//2])

if len(nums_s) > 1 :
  if nums_s[0][1] == nums_s[1][1] :
    print(nums_s[1][0])
  else:
    print(nums_s[0][0])
else:
  print(nums_s[0][0])

print(num[-1] - num[0])


4. Java 문제풀이


댓글남기기