1. 통계학
- 난이도
- 실버 4
- 시간 제한
- 2초
- 메모리 제한
- 256 MB
- 출처
A. 문제
- 실버 4
- 2초
- 256 MB
위 백준 사이트에 접속하여 문제를 확인해주세요.
B. 내 답안
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
avg = sum(array)/len(array)
avg = int(round(avg, 0))
mid = sorted(array)[len(array)//2]
count_sort = {}
for i in array:
if i in count_sort:
count_sort[i] += 1
else:
count_sort[i] = 1
max_count = sorted(count_sort.items(), key=lambda i:i[1], reverse=True)
# print(max_count)
# for key, value in count_sort.items():
mode_count = [x[0] for x in max_count if x[1] == max_count[0][1]]
if len(mode_count) > 1:
mode_count = sorted(mode_count)[1]
else:
mode_count = mode_count[0]
# bin =
scope = max(array) - min(array)
print(avg)
print(mid)
print(mode_count)
print(scope)
a. 회고
내 풀이
- 특정 문자의 빈도를 구하는 방법으로 문자열은 count 메소드가 있지만, list는 Counter 모듈을 사용해야 한다.
- 값의 범위가 -4000 ~ 4000 이라서 리스트를 사용한 계수 정렬은 불가능하다.
- 물론 값에 4000을 더해서 생각한다면, 계수 정렬도 가능하다.
- 그래서 딕셔너리를 통해 빈도를 카운트했다.
반성
- 값에 4000을 더해서 무조건 양수로 만드는 방법을 생각하지 못했다.
결론
- 세상은 넓다. 실력자도 많다. 문제를 풀어갈수록 모르는 것 투성이다.
C. 문제 해설
이해한 내용을 바탕으로 작성했습니다.
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
avg = sum(array)/len(array)
avg = int(round(avg, 0))
mid = sorted(array)[len(array)//2]
count_sort = {}
for i in array:
if i in count_sort:
count_sort[i] += 1
else:
count_sort[i] = 1
max_count = sorted(count_sort.items(), key=lambda i:i[1], reverse=True)
# print(max_count)
# for key, value in count_sort.items():
mode_count = [x[0] for x in max_count if x[1] == max_count[0][1]]
if len(mode_count) > 1:
mode_count = sorted(mode_count)[1]
else:
mode_count = mode_count[0]
# bin =
scope = max(array) - min(array)
print(avg)
print(mid)
print(mode_count)
print(scope)
내 풀이
- 특정 문자의 빈도를 구하는 방법으로 문자열은 count 메소드가 있지만, list는 Counter 모듈을 사용해야 한다.
- 값의 범위가 -4000 ~ 4000 이라서 리스트를 사용한 계수 정렬은 불가능하다.
- 물론 값에 4000을 더해서 생각한다면, 계수 정렬도 가능하다.
- 그래서 딕셔너리를 통해 빈도를 카운트했다.
반성
- 값에 4000을 더해서 무조건 양수로 만드는 방법을 생각하지 못했다.
결론
- 세상은 넓다. 실력자도 많다. 문제를 풀어갈수록 모르는 것 투성이다.
C. 문제 해설
이해한 내용을 바탕으로 작성했습니다.
이해한 내용을 바탕으로 작성했습니다.
셋째 줄에 출력하는 최빈값이 문제다.
최빈값을 구하려면 값의 빈도를 알아야 한다. 값의 빈도는 딕셔너리에 해당 key값이 있으면 value를 증가시키는 방법으로 구할 수 있다.
딕셔너리에 값을 다 넣었다면, 최빈값을 구해야 한다. 최빈값은 딕셔너리의 value를 기준으로 정렬시켜서 구할 수 있다.
이때, 최빈값이 여러개일 수도 있으니, value를 기준으로 정렬한 리스트의 첫번째 빈도값과 같은 경우만 따로 리스트를 만들어준다. 그리고 출력할때는 이 리스트를 오름차순으로 정렬하고 두번째 값을 출력하면 된다.
참고문헌
2108번: 통계학 (acmicpc.net). Baekjoon. (accessed Sep 10, 2021)
Ghost