백준|2108번|통계학

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
45/136

문제설명
숫자들을 입력받고 평균, 중간값, 최빈값, 최솟값과 최댓값의 차이를 출력하는 프로그램입니다.

작동 순서
1. 숫자들의 개수를 입력받습니다.
2. 숫자들을 입력받습니다.
3. 입력받은 숫자가 하나인경우 계산을 할 이유가 없으므로 바로 값을 출력합니다.
4. 입력받은 숫자가 하나가 아닌 경우 평균, 중간값을 출력합니다.
5. 입력받은 숫자들의 중복값을 제거하고 딕셔너리로 만들어서 그 숫자가 한번 등장할때마다 딕셔너리에서 그 숫자의 value 값을 +1해줍니다.
6. 딕셔너리를 정렬하고 가장 큰 값을 출력해주는데 가장 큰 값이 여러개일 경우 두번째로 큰 숫자를 출력합니다.
7. 최댓값과 최솟값의 차이를 출력합니다.

소스코드

import operator
import sys
N = int(sys.stdin.readline())
arr = [0 for i in range(N)]
for i in range(N):
    arr[i] = int(sys.stdin.readline())
if N > 1:
    arr.sort()
    print(round(sum(arr)/N))
    print(arr[int(N/2)])
    mode = {}
    deduplication = sorted(set(arr))
    for i in deduplication:
        mode[i] = 0
    for i in arr:
        mode[i] += 1
    mode = sorted(mode.items(), key=operator.itemgetter(1))
    count = 0
    for i in range(len(mode)-1, -1, -1):
        if i == 0:
            print(mode[1][0])
            break
        if count == 0 and mode[i][1] > mode[i-1][1]:
            print(mode[i][0])
            break
        if mode[i][1] > mode[i-1][1]:
            print(mode[i+1][0])
            break
        if mode[i][1] == mode[i-1][1]:
            count += 1
    print(arr[N - 1] - arr[0])
else:
    print(arr[0])
    print(arr[0])
    print(arr[0])
    print(0)

후기
코드도 지저분하고 속도도 오래걸리는것을 보아 다른 사람들의 코드를 보고 연구도 하고 언어 자체도 좀 더 공부를 하면서 실력을 향상시켜야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글