class 2
- 실패 코드
def avg(arr, n):
sum=0
for i in arr:
sum+=i
return round(sum/n)
def mid(arr, n):
arr.sort()
return arr[n//2]
def max(arr, n):
li=dict()
max=0
cnt=0
arr.sort()
for i in range(n):
if arr[i] not in li:
li[arr[i]]=1
else:
for j in li:
if j==arr[i]:
li[j]+=1
for i in li:
if max<li[i]:
max=li[i]
max_key=i
for i in li:
if li[max_key]==li[i]:
cnt+=1
if cnt>1:
return arr[1]
else : return max_key
def numrange(arr, n):
arr.sort()
cha=arr[-1]-arr[0]
return cha
n=int(input())
number=[]
for _ in range(n):
number.append(int(input()))
print(avg(number,n))
print(mid(number,n))
print(max(number,n))
print(numrange(number,n))
실패 이유 : 시간 초과
- 성공 코드
import sys
from collections import Counter
def avg(arr, n):
return (round(sum(arr)/n))
def mid(arr, n):
return arr[n//2]
def max(arr, n):
max = Counter(arr).most_common()
if len(max) > 1 and max[0][1]==max[1][1]:
return max[1][0]
else:
return max[0][0]
def numrange(arr, n):
cha=arr[-1]-arr[0]
return cha
n=int(input())
number=[]
for _ in range(n):
number.append(int(sys.stdin.readline()))
number.sort()
print(avg(number,n))
print(mid(number,n))
print(max(number,n))
print(numrange(number,n))
<코드 설명>
main : 입력받을 숫자의 개수를 n으로 입력받고 number이라는 list에 n개의 수를 입력받아 추가해주었다. 그리고 이를 sort해주었다.
산술 평균 -> avg 함수 : arr의 합을 총 개수인 n으로 나눠준다.
중앙값 -> mid 함수 : arr가 이미 sort 되어 있으므로 n을 2로 나눈 수(중간 index) 번째에 있는 arr 값을 반환한다.
최빈값 -> max 함수 : counter를 사용하여 arr의 최빈값을 구하여 max에 저장해주었다. 최빈값이 2개 이상일때 max[1][0] (두번째로 작은 값)을 가져오고, 그렇지 않으면 max[0][0] (빈도수 높은 값)을 가져온다.
범위 -> numrange 함수 : arr의 마지막 원소와 첫번째 함수의 차이를 반환한다.
<실행 결과>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1235 학생 번호 (0) | 2022.07.03 |
---|---|
[BOJ] 1316 그룹 단어 체커 (0) | 2022.06.26 |
[BOJ] 1978 소수 찾기 (0) | 2022.06.25 |
[BOJ] 1427 소트인사이드 (0) | 2022.06.19 |
[BOJ] 2869 달팽이는 올라가고 싶다 (0) | 2022.06.19 |