Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 비지도학습
- 캐싱
- 스택과 힙
- 백준
- 코딩
- 파이썬
- post
- bineary search
- 딕셔너리
- 지도학습
- rest api
- 깊이우선탐색
- 너비우선탐색
- BOJ
- 딥러닝
- HTTP
- 멱등
- 코테
- 파이썬 알고리즘
- 머신러닝
- 자바
- 해시
- 강화학습
- 코딩테스트
- Merge sort
- 파이썬 오류
- 오버라이딩
- 알고리즘
- 이진탐색
Archives
- Today
- Total
chae._.chae
[Algorithm] 백준 #2108 - 통계학 본문
728x90
반응형
4가지 중 최빈값을 찾는 부분이 가장 어려웠다.
파이썬의 collection 모듈의 Counter클래스를 사용하여 풀 수 있다.
collection 모듈의 Counter클래스는 데이터의 갯수를 셀 때 유용하다.
collection 모듈의 Counter클래스는 파이썬의 기본 자료구조인 dictionary를 확장하고 있다.
Counter 클래스는 데이터의 갯수가 많은 순서대로 배열을 리턴하는 most_common 메소드를 제공한다.
print(Counter('aaaaaaaaaaaaabc').most_common(1))
# 결과 : [('a', 13)]
예시) 주어진 단어에서 가장 많이 사용된 알파벳과 그 갯수를 구하는 코드
from collections import Counter
def find_max(word):
counter = Counter(word)
max_count = -1
for letter in counter:
if counter[letter] > max_count:
max_count = counter[letter]
max_letter = letter
return max_letter, max_count
print(find_max('hello world')) # ('l', 3)
1. 반올림 함수 round를 사용한다.
def ave(nums):
result = sum(nums) # 합계
return round(result / n) # 반올림 함수 사용.
이부분을 놓쳐서 계속 틀렸다..!
마지막 출력 예제였던 0, 0, -1을 입력한 합계가 0이 나와야 하므로, -1/3의 결과에서 반올림 시켜 0이 되게 round함수를 사용해준다.
2. Counter로 빈도수를 카운트 해주고, 가장 많이 나온 상위 2개를 가져온다.
if문 => 빈도수가 동일하면 두번째로 작은 값을 출력(이미 위에서 sort를 해줘서 정렬되어 있다!)
else => 빈도수가 동일하지 않다면 가장 빈도수가 많은 값을 출력해준다.
def freq(nums):
# Counter를 이용해 빈도수를 구해주고, most_common(2)를 사용하여 빈도수가 높은 숫자 2개를 가져온다
cnt = Counter(nums).most_common(2)
if len(nums) > 1 and cnt[0][1] == cnt[1][1]: # 최빈값이 여러개인 경우(두개가 같음)
return (cnt[1][0])
else:
return (cnt[0][0])
<Solution>
import sys
from collections import Counter
n = int(sys.stdin.readline())
nums=[]
for _ in range(n):
nums.append(int(sys.stdin.readline()))
def ave(nums):
result = sum(nums) # 합계
return round(result / n) # 반올림 함수 사용.
def middle(nums):
nums.sort()
return nums[len(nums) // 2]
def freq(nums):
# Counter를 이용해 빈도수를 구해주고, most_common(2)를 사용하여 빈도수가 높은 숫자 2개를 가져온다
cnt = Counter(nums).most_common(2)
if len(nums) > 1 and cnt[0][1] == cnt[1][1]: # 최빈값이 여러개인 경우(두개가 같음)
return (cnt[1][0])
else:
return (cnt[0][0])
def diff(nums):
nums.sort() # 오름차순 정렬
return nums[len(nums)-1] - nums[0]
print(ave(nums))
print(middle(nums))
print(freq(nums))
print(diff(nums))
728x90
'파이썬 알고리즘 > BOJ' 카테고리의 다른 글
[Algorithm] 백준 #4963 - 섬의 개수 (0) | 2022.05.20 |
---|---|
[Algorithm] 백준 #1946 - 신입사원 (0) | 2022.03.29 |
# 3048 - 개미 (0) | 2022.01.15 |
#18238 - ZOAC 2 (0) | 2022.01.09 |
#10773 - 제로 (0) | 2021.12.30 |