문제설명
숫자들을 입력받고 평균, 중간값, 최빈값, 최솟값과 최댓값의 차이를 출력하는 프로그램입니다.
작동 순서
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)
후기
코드도 지저분하고 속도도 오래걸리는것을 보아 다른 사람들의 코드를 보고 연구도 하고 언어 자체도 좀 더 공부를 하면서 실력을 향상시켜야 할 것 같습니다.