Collections
모듈의 Counter
클래스를 이용해 출력하도록 했다.from collections import Counter
import sys
N = int(sys.stdin.readline())
nums = []
for _ in range(N):
nums.append(int(sys.stdin.readline()))
nums.sort()
print(round(sum(nums)/N))
print(nums[N//2])
# 최빈값 중 두 번째로 작은 값을 출력한다.
nums_mode = Counter(nums).most_common()
if len(nums_mode) > 1:
if nums_mode[0][1] == nums_mode[1][1]:
print(nums_mode[1][0])
else:
print(nums_mode[0][0])
else:
print(nums_mode[0][0])
print(max(nums)-min(nums))
# print(nums[-1] - nums[0])
most_common()
)collections.Counter(a).most_common()
: a의 요소를 세어, 최빈값을 리스트에 담긴 튜플 형태로 반환한다.문제에서의 예제 입력을 이용해 예를 들자면, 입력이 다음과 같을 때
5
1
3
8
-2
2
most_common()
을 사용하면
nums_mode = Counter(nums).most_common()
nums_mode
[(-2, 1), (1, 1), (2, 1), (3, 1), (8, 1)]
nums
리스트에는 [1, 3, 8, -2, 2]
가 담겨있으므로 각 수의 등장횟수인 1이 튜플 형태로 짝지어서 저장이 된다.
nums_mode[0][0]
의 출력값은 -2가되고, nums_mode[0][1]
의 출력값은 1이 된다.
우리가 필요한 것은 최빈값 이므로 등장빈도 횟수를 비교해서, 그 횟수가 가장 큰 수를 출력해 주면 된다.
셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
라는 조건이 있으므로 if
문에 해당하는 조건을 넣어준다. 등장빈도가 동일한 수가 있다면, 두 번째로 작은 값을 출력해주고, 아니라면 그냥 제일 첫번째 원소에 해당하는 수를 출력해주면 된다.