정수 배열이 주어졌을 때, 평균, 중앙값, 최빈값, 범위를 출력하는 문제이다.
link: 통계학
import sys
n = int(sys.stdin.readline())
data = []
for i in range(n):
data.append(int(sys.stdin.readline()))
data.sort()
total = 0
high = -4001
low = 4001
count = 0
max_count = 0
once = True
often_value = data[0]
prev = data[0]
for i in data:
total += i
if(i < low):
low = i
if(i > high):
high = i
if(i == prev):
count += 1
else:
if(count > max_count):
max_count = count
once = True
often_value = prev
elif(count == max_count):
if(once):
once = False
often_value = prev
count = 1
prev = i
# 44444 일경우 44445 일경우 count = 1
if(count > max_count):
max_count = count
often_value = prev
elif(count == max_count):
if(once):
often_value = prev
print(round(total/n))
print(data[(n-1)//2])
print(often_value)
print(high - low)
파이썬 안에 내장함수를 써도 되지만, 내장 함수는 O(n)이 걸리므로
한번 for문을 돌려서 모든 값을 알아내고 싶었습니다.
배열이 정렬된 상태이므로 [1, 1, 1, 2, 2, 3] 과 같은 상태이다.
배열을 돌면서 이전 값 (prev)와 비교하여 값이 달라지면, 최빈값을 갱신하는 식으로 코드를 짰다.
once라는 불변수를 둔 이유는 최빈값 출력시 두번째로 작은 값을 출력하는 것이므로, 해당 최빈값이 첫번째로 작은 값인지 아닌지를 나타내는 변수이다.
n일 때 n-1과 값을 비교하므로 마지막 항 처리를 위해 while이 끝난 후에도 코드가 더 돈다.