티스토리 뷰
728x90
반응형
문제
코드
import sys
from collections import Counter
N = int(sys.stdin.readline())
k = []
for i in range(N):
k.append(int(sys.stdin.readline()))
k.sort()
#산술평균
print(int(round(sum(k)/N,0)))
#중앙값
print(k[N//2])
#최빈값
f = Counter(k) # 딕셔너리 형태로 출력 Counter({-2: 1, 1: 1, 2: 1, 3: 1, 8: 1})
b = f.most_common() # 빈도수가 높은순으로 투플형태로 출력 [(-2, 1), (1, 1), (2, 1), (3, 1), (8, 1)]
if len(k) >1: #만약 입력값이 하나면, 그게 최빈값이므로 예외처리
if b[0][1] == b[1][1]:
print(b[1][0]) # 최빈값의 빈도수를 비교하여, 2개이상의 최빈값이 있으면 두번쨰로 작은것을 출력
else:
print(b[0][0])
else:
print(k[0])
#범위
print(k[-1] - k[0])
코드설명
입력된 값들에 대하여 산술평균, 중앙값, 최빈값, 범위를 구하는 문제이다.
산술평균은 sum()을 이용해 리스트 값들을 전부 더한 다음 N으로 나눠주고 round 함수를 사용해 반올림을 해주면 된다.
중앙값은 N을 2로 나눈 몫으로 인덱스를 사용해 나타내고
최빈값은 라이브러리 Counter를 사용해 딕셔너리 형태로 만들어주고 most_common() 함수를 사용해 빈도수가 높은 순으로 투플 형태로 만들어준다. 문제에 최빈값이 여러개라면 두번째로 작은 값을 출력하라고 나와있어서 로직을 따로 만들어 줘야한다.
범위는 N개의 수 들중 최댓값과 최솟값의 차이이기 때문에 k[-1] 에서 k[0]을 빼주면 된다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2231번 분해합 (Python) (0) | 2021.03.15 |
---|---|
[백준] 2798번 블랙잭 (Python) (1) | 2021.03.15 |
[백준] 1260번 DFS와 BFS (Python) (0) | 2021.03.14 |
[백준] 4949번 균형잡힌 세상 (Python) (0) | 2021.03.14 |
[백준] 18258번 큐 2 (Python) (0) | 2021.03.13 |
댓글