728x90
https://www.acmicpc.net/problem/2108
난이도 : 실버 3
분류 : 구현, 정렬
백준 2108 : 통계학
코드
import sys
from collections import Counter
N = int(sys.stdin.readline())
lst = []
for i in range(N):
lst.append(int(sys.stdin.readline().rstrip()))
print(round(sum(lst)/N))
lst.sort()
print((lst[(len(lst)-1) // 2]))
c = Counter(lst)
num_c = c.most_common()
if len(num_c) > 1:
if num_c[0][1] == num_c[1][1]:
print(num_c[1][0])
else:
print(num_c[0][0])
else:
print(num_c[0][0])
print(lst[-1] - lst[0])
대부분 최빈값 구하는 부분에서 많이 틀린 것 같습니다.
특히, 최빈값이 여러개일 때 더 작은 값을 추출해 내는게 어려웠습니다.
파이썬은 Counter 클래스를 사용하여 간단하게 최빈값을 찾아낼 수 있습니다.
from collections import Counter
a = ['blue', 'blue', 'red', 'green', 'red']
colors = Counter(a)
print(colors)
Counter({'blue': 2, 'red': 2, 'green': 1})
a에 포함된 값이 몇개씩 들어있는지 딕셔너리 형태로 나타냅니다. 이것은 아래 코드와 같은 기능을 합니다.
def countLetters(word):
counter = {}
for letter in word:
if letter not in counter:
counter[letter] = 0
counter[letter] += 1
return counter
a = ['blue', 'blue', 'red', 'green', 'red']
print(countLetters(a))
{'blue': 2, 'red': 2, 'green': 1}
most_common(n)은 가장 많은 것부터 n개를 나타낼 수 있습니다.
from collections import Counter
a = ['blue', 'blue', 'red', 'green', 'red']
colors = Counter(a)
print(colors)
print((colors.most_common()))
print(colors.most_common(2))
Counter({'blue': 2, 'red': 2, 'green': 1})
[('blue', 2), ('red', 2), ('green', 1)]
[('blue', 2), ('red', 2)]
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[파이썬] 백준 4949 : 균형 잡힌 세상 (0) | 2022.02.22 |
---|---|
[파이썬] 백준 9012 : 괄호 (0) | 2022.02.22 |
[python] 백준 1193 : 분수 찾기 (0) | 2022.02.11 |
[python] 백준 1316 : 그룹 단어 체커 (0) | 2022.02.07 |
[python] 백준 2941 : 크로아티아 알파벳 (0) | 2022.02.06 |