https://www.acmicpc.net/problem/2108

상당히 간단한 문제이기에
파이썬의 기능을 최대한 이용해보려고 했다.
산술평균의 경우 파이썬의 sum 함수를 사용해 모든 값들을 더해서 N으로 나눠준 뒤
round 함수를 사용해 반올림해주었다.
중앙값의 경우 간단히 입력 값들을 sort 함수로 정렬해주고 N의 절반 인덱스의 값을 출력하게 해주었다.
최빈값은 collections의 Counter를 사용해주었다.
Counter 객체는 인자로 들어온 요소를 개수가 몇개인지 세주는 기능을 가지고 있다.
예를 들어 Counter([1, 1, 1, 2, 2, 3]) 을 해주면
Counter((1, 3), (2, 2), (3, 1))
로 개수를 세어서 저장한다.
이때 Counter의 most_common 함수를 사용하면
이 개수를 센 결과값을 개수에 따라 내림차순으로 정렬해서 반환한다.
이때 most_common의 함수의 인자로 n을 넣어주면
n개까지만 빼내어서 보내준다.
범위의 경우 파이썬의 리스트는 인덱스를 음수로 넣어 역순으로 순회할 수 있는 기능을 가지고 있다.
[-1]이 마지막 원소이므로 [-1] - [0] 을 해서 범위를 구해주었다.
마지막으로 출력해주면 완료이나
이때 최빈값이 여러개라면 그 중 두번째로 작은 값을 출력해야 한다.
counter는 most_common을 했을 때 같은 개수를 가진게 여러개라면 오름차순으로 정렬해서 내보낸다.
따라서 most_common(2)를 통해 2개를 빼내고
만약 빼낸게 2개이고 2번째거와 첫번째꺼의 개수가 같으면 이 값으로 출력하게 해주었다.
코드보기
from sys import stdin
from collections import Counter
N = int(stdin.readline())
num = [0] * N
for i in range(N):
num[i] = int(stdin.readline())
num.sort()
avg = sum(num) / N
mid = num[N // 2]
cnt = Counter(num).most_common(2)
rng = num[-1] - num[0]
print(round(avg))
print(mid)
if len(cnt) > 1 and cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else:
print(cnt[0][0])
print(rng)
'공부하기 > 문제 풀기' 카테고리의 다른 글
| [백준][Python] 1927번: 최소 힙 (최소 힙의 개념과 직접 구현하기) (1) | 2024.11.24 |
|---|---|
| [백준][Python] 1755번: 숫자놀이 (0) | 2024.11.22 |
| [백준][Python] 2502번: 떡 먹는 호랑이 (0) | 2024.11.20 |
| [백준][Python] 2012번: 등수 매기기 (0) | 2024.11.18 |
| [백준][C] 2003번: 수들의 합 2 (0) | 2024.11.17 |