https://www.acmicpc.net/problem/2108
1. 내가 작성한 풀이
from collections import Counter
import sys
n = int(sys.stdin.readline())
arr = []
for i in range(n):
arr.append(int(sys.stdin.readline()))
arr = sorted(arr)
#산술평균
print(int(round(sum(arr)/n,0)))
#중앙값
print(arr[n//2])
#최빈값
cnt = Counter(arr)
value = cnt.most_common()
maxium = value[0][1]
mods = []
for num in value:
if num[1] == maxium:
mods.append(num[0])
if len(mods) >= 2:
print(mods[1])
else:
print(mods[0])
#범위
print(max(arr) - min(arr))
1. 산술평균
print(int(round(sum(arr)/n,0)))
round라는 함수를 잘 몰라서, round(숫자,0)으로 했더니 실수 형태로 출력이 됐다.
이걸 int 함수로 감싸서 출력했는데
그냥 round(sum(arr)/n)을 하면 알아서 반올림되어 출력한다.
2. 중앙값
print(arr[n//2])
index를 이용해서 구하면 간단하게 구할 수 잇다 (숫자의 개수가 홀수라고 정해져있음)
3. 최빈값
이 문제에서 가장 어려운 부분이다.
우선 Counter(리스트명).most_common() 함수란 데이터의 개수가 많은 순으로 정렬된 배열을 리턴하는 함수이다.
arr = [1,3,8,-2,2]
cnt = Counter(arr).most_common()
#값이 많은 것부터 순서대로 출력 됨
#[(1, 1), (3, 1), (8, 1), (-2, 1), (2, 1)]
본 문제에서 최빈값이 여러 개가 있을 경우 두 번째로 작은 값을 출력해야 하기 때문에
maximum = cnt[0][1] #1
mods = []
for i in cnt:
if maximum == i[1]:
mods.append(i[0])
print(mods[1])
새로운 배열에 maximum과 같은 값을 가진 key들을 넣어주고, index가 1인 수를 출력하주면 두 번째로 작은 값이 출력된다.
cnt = Counter(arr)
value = cnt.most_common()
maxium = value[0][1]
mods = []
for num in value:
if num[1] == maxium:
mods.append(num[0])
if len(mods) >= 2:
print(mods[1])
else:
print(mods[0])
최빈값이 1개인 경우를 생각해서 조건부로 걸어주면 문제를 풀 수 있다.
Counter 함수를 잘 이해하고 있으면 해결할 수 있는 문제였다.
4. 범위
print(max(arr) - min(arr))
범위도 그냥 원소의 최대값에서 원소의 최소값을 빼면 된다.
input() 함수를 사용하면 시간초과가 발생하기 때문에 sys.stdin.readline() 까지 사용하면 끝!
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 1260번 DFS와 BFS (with python) (0) | 2023.02.07 |
---|---|
[백준] 15469번 N과 M (1)(with python) (0) | 2023.02.04 |
[백준] 11651번 좌표 정렬하기 2(with python) (0) | 2023.02.02 |
[백준] 10815번 숫자 카드(with python) (0) | 2023.02.01 |
[백준] 1181번 단어 정렬(with python) (0) | 2023.02.01 |
댓글