반응형
코드
# https://teching.tistory.com/
import sys
cnt = [0 for _ in range(8001)]
n = int(sys.stdin.readline().rstrip())
total = 0
maxN = -4000
minN = 4000
for _ in range(n):
num = int(sys.stdin.readline().rstrip())
cnt[num+4000] += 1
total += num
maxN = max(maxN, num)
minN = min(minN, num)
mode = []
index = 0
for i in range(8001):
num = i-4000
if cnt[i] == max(cnt):
mode.append(num)
for _ in range(cnt[i]):
if index == n//2:
mid = num
index += 1
print(round(total/n))
print(mid)
print(mode[1] if len(mode)>1 else mode[0])
print(maxN - minN)
해설
라이브러리를 사용하면 금방 끝낼 수 있는 문제지만 나는 직접 알고리즘을 만들어보고 싶었다.
계수 정렬 알고리즘을 응용해서 만들어보았다.
계수 정렬의 기본적인 개념은 https://teching.tistory.com/80에서 정리를 해놓았다.
다만 단순 정렬하는게 아닌 산술평균, 중앙값, 최빈값, 범위를 구해야 하므로 각각 필요한 값인
최댓값, 최솟값, 총합, 중앙값을 구해 주었다.
1. 산술평균 : 단순하게 입력된 값들을 모두 더해주었다.
2. 중앙값 : index변수를 만들어 해당 값의 index가 배열의 크기 n의 절반 값에 해당되는 값을 찾아주었다.
3. 최빈값 : 카운트 값이 가장 높은 숫자들을 따로 배열을 만들어 저장해 두고 문제에 알맞게 처리해주었다.
4. 범위 : 최대값 - 최솟값을 해주면 된다.
해당 방법으로 알고리즘을 구현시 시간은 조금 걸리지만 메모리를 많이 아낄 수 있게 된다.
반응형
'알고리즘 테스트 > 백준' 카테고리의 다른 글
백준 9663 : N-Queen (파이썬) (0) | 2022.02.04 |
---|---|
백준 15649 : N과 M (1) (파이썬) (0) | 2022.02.01 |
백준 10989 : 수 정렬하기3(카운팅정렬) (0) | 2022.01.30 |
백준 2751 : 수 정렬하기2 (파이썬) (0) | 2022.01.29 |
백준 1018 : 체스판 다시 칠하기 (파이썬) (0) | 2022.01.29 |