티스토리 뷰
https://www.acmicpc.net/problem/2108
1. 문제 내용
2. 접근 방식
- 입력되는 정수의 개수가 최대 50만이므로, 최대한 입력 받은 정수 리스트 순회를 줄이자.
이에, 정수를 입력받을 때 산술평균을 위한 sum 계산과 최빈값을 위한 각 수의 카운팅을 수행한다.
- 입력 받은 정수 리스트를 정렬하는 것은 불가피하므로, 인덱싱을 활용하자.
중앙값을 구하려면 리스트를 오름차순 정렬해야 한다. 그리고 이를 중앙값 뿐만 아니라, 범위를 구할 때도 활용하자. min( )과 max( ) 내장 함수를 사용할 수도 있지만, 이미 리스트는 오름차순 정렬돼 있으므로 0번째가 최소값, -1번째가 최대값이다. 인덱싱은 O(1) 시간 복잡도를 가지므로, 내장함수 대신 인덱싱으로 범위를 구하자.
3. 정답 코드
import sys
input = sys.stdin.readline
n = int(input())
data = []
_sum = 0
count = dict()
for _ in range(n):
x = int(input())
data.append(x)
_sum += x
if x not in count:
count[x] = 1
else:
count[x] += 1
data.sort()
# 산술평균
print(round(_sum/n))
# 중앙값
print(data[n//2])
# 최빈값
freq = max(count.values())
numbers = []
for key, value in count.items():
if value == freq:
numbers.append(key)
if len(numbers) == 1:
print(numbers[0])
else:
print(sorted(numbers)[1])
# 범위
print(data[-1] - data[0])
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 17413번 단어 뒤집기 2 파이썬 정답 코드 (0) | 2023.06.13 |
---|---|
[백준] 2477번 참외밭 파이썬 정답 코드 (0) | 2023.06.11 |
[백준] 1966번 프린터 큐 파이썬 정답 코드 (0) | 2023.06.10 |
[백준] 1213번 팰린드롬 만들기 파이썬 정답 코드 (3) | 2023.06.09 |
[백준] 17521번 Byte Coin 파이썬 정답 코드 (0) | 2023.06.07 |