티스토리 뷰
<문제 링크>
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
<문제 풀이>
import sys
N = int(sys.stdin.readline())
num = []
count = [0] * 8001
for i in range(N):
n = int(sys.stdin.readline())
num.append(n)
count[n+4000] += 1
print(round(sum(num)/N))
print(sorted(num)[N//2])
mode = list(filter(lambda x: count[x] == max(count), range(len(count))))
if len(mode) == 1:
print(mode[0]-4000)
else:
print(mode[1]-4000)
print(max(num)-min(num))
*key point: 산술평균, 중앙값, 범위는 어렵지 않게 해결할 수 있지만 최빈값의 경우 비교적 어렵다. 최빈값을 계산하기 위하여 count라는 리스트를 활용하였고 이 때 음수를 고려하기 위해 가능한 가장 작은 n값인 4000을 더해주었다. filter 함수를 활용하여 최빈값이 여러 개인 경우도 고려하여 index를 찾아 list로 얻었으며, 출력시 더해주었던 4000을 빼주었다.
'What I Learned > Algorithm Practice' 카테고리의 다른 글
[백준 - python] 11650번: 좌표 정렬하기 (1) | 2022.09.29 |
---|---|
[백준 - python] 1427번: 소트인사이드 (0) | 2022.09.27 |
[백준 - python] 25305번: 커트라인 (0) | 2022.09.27 |
[백준 - python] 10989번: 수 정렬하기 3 (0) | 2022.09.27 |
[백준 - python] 2751번: 수 정렬하기 2 (0) | 2022.09.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 2587
- 항해 플러스
- SQL
- programmer
- Wil
- 2738
- Programmers
- 항해+
- 24723
- 13241
- 13909
- 24060
- 25501
- 코육대
- 벡준
- 1269
- 2053
- 26069
- Python
- 백준
- 24313
- til
- 20920
- 2903
- 17103
- 25192
- 10807
- 4134
- 5597
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함